我有一个空的水平布局,我动态填充三个孩子 . 这是一个纸牌游戏,所以这个布局动态填充了具有图像集的QLabel儿童 . 当我点击一张卡片进行播放并将其移动到屏幕中央时,我希望其他卡片的位置保持不变 . 相反,卡往往“浮动”到右边 . 我如何强迫他们保持原来的位置?
+-----------------+
| |
| [A] - [B] - [C] |
| |
+-----------------+
我尝试在每张卡之间放置一个可扩展的水平垫片,但它并没有真正起作用 . 我也尝试用网格布局替换水平布局,但这迫使我指定卡片的初始坐标,而我不愿意 . 我喜欢这样的事实:我可以使用addWidget追加小部件,就像我在HTML版本中一样 .
在HTML版本中,我使用了一些围绕卡片固定大小的包装器div . 我怎样才能在Qt中做类似的事情?
编辑
稍微澄清一张卡(B)播放时布局应如何显示 .
+-----------------+
| |
| [A] - - [C] |
| |
+-----------------+
正如我所提到的,我设法用空的QWidget填充布局并将卡放在它们之上(不在它们内部) . 我实际上也摆脱了我不再需要的水平垫片 . 这看起来像我预期的那样有效,尽管我仍然没有完全验证这种方法 .
2 回答
执行您想要的简单算法步骤:
用户点击
选择发生点击的标签
如果有图像,请从标签中删除图像
唐't remove the label from the layout, and make sure that the layout don' t调整标签大小
将图像添加到棋盘游戏中心的标签上 .
当用户点击没有任何内容的标签时,只需忽略该点击即可 .
对于每个玩家,您知道可以在布局中显示的最大卡数 . 而且,我不认为卡的大小是可变的 . 因此,每次为一个玩家创建一个牌组时,请创建空标签,每个标签都有固定的大小 .
EDIT: SOME OTHER PROPOSITIONS
使用
QWidget::setFixedSize()
修复标签大小;Don 't hide your label to remove your pixmap . Don' t设置一个空的像素图 . 相反,设置一个透明的像素图或填充一些中性色......
或者子类
QLabel
,以便您可以指示最小大小提示 . 布局 must and will 尊重您设置的任何内容 . 例:每次需要再次绘制整个应用程序时,都会检查所有窗口小部件属性 . 我的两分钱是当你玩牌时修改了尺寸属性,并且布局适应这种修改 . 告诉我大小提示技巧是否有效(应该) .
在Qt中,您可以使用包装器
QWidget
和Fixed
sizePolicy
.