我有一个如下所示的网格布局,其中包含3个QLabel对象,用于显示3个单独的视频流。可以切换一些流,我希望显示在布局中自动调整大小到最大尺寸。
当使用两个相邻的QLabel(仅红色和蓝色)时,我可以通过在一个标签上使用setVisible(false)来完成此操作,另一个标签将调整大小以填充布局区域。但是在下面的布局中添加第三个标签对象已经打破了这个,虽然我不知道为什么。
这是在网格布局中使用两个相邻的qlabels 激活的2个“流”(仅使用网络摄像头进行测试,第二个显示屏还没有视频)
然后在调用label2-> setVisible(false)
之后这是我在使用3个标签时想要的结果。当我尝试这个并设置标签2和3的可见性时,这就是我得到的:
包含qlabels的gridlayout使用setFixedSize约束,并且每个qlabel正在使用水平和垂直的首选大小策略。你可以看到垂直调整大小应该工作,但不是水平。如何调整标签以正确调整水平尺寸?
可以在此处看到ui的完整样式表:http://pastebin.com/vJUkMGT8
答案 0 :(得分:1)
它不适用于QGridLayout
,因为它应该更像一张桌子。相同数量的行和列。如果您要使用这三个流,可以使用QHorizontalLayout
作为前两个对象,并将第三个对象放入QVerticalLayout
。
问题是当您关闭第二个流(隐藏它)时。实际上你应该隐藏第三个QLabel
并在第二个QLabel
中播放第三个流。
这是一个非常特殊的布局,你应该继承和编写自己的布局,特别是当你有更多的流而不是三个。