QGridLayout:改变一行的高度

Posted

技术标签:

【中文标题】QGridLayout:改变一行的高度【英文标题】:QGridLayout: change height of a row 【发布时间】:2016-10-01 12:12:55 【问题描述】:

我是 qt 的新手,现在我的窗口如下所示:

*---------* *---------* *---------* *---------* 
|ListView1| |ListView2| |ListView3| |ListView4| 
|         | |         | |         | |         |
*---------* *---------* *---------* *---------* 
*---------------------------------------------*
|                                             |
|                  ListView5                  |
|                                             |
*---------------------------------------------*    
*---------------------------------------------*
|                  GridLayout2                |
|                                             |
*---------------------------------------------*

问题是第二行(ListView5)高于第一行和第三行,而我希望第一行高于第三行,第三行应该高于第二行。有没有办法做到这一点?或者我应该使用网格布局的其他东西吗?谢谢。

【问题讨论】:

你说的更高是什么意思?您的意思是它的“height 更大”吗?还是说应该“放在上面”? 是的,我的意思是“高度更大”。很抱歉有歧义。 一般来说,QGridLayout 将根据包括小部件的大小提示/策略等几个因素来调整行和列的大小。如果您想调整,可以尝试设置每一行的stretch factor。但是,如果不知道您的确切要求,就很难说更多了。 【参考方案1】:

我建议您阅读文档here,了解在将小部件添加到布局时如何为其分配大小:

    所有小部件最初都会根据它们的QWidget::sizePolicy()QWidget::sizeHint()。 如果任何小部件设置了拉伸因子,其值大于零,则它们将按比例分配空间 他们的拉伸系数。 如果任何小部件的拉伸系数设置为零,则只有在没有其他小部件需要空间的情况下,它们才会获得更多空间。这些, 空间首先分配给具有Expanding 大小策略的小部件。 分配的空间小于其最小尺寸(或最小尺寸提示,如果未指定最小尺寸)的任何小部件都将被分配 他们需要的最小尺寸。 (小部件不必有最小值 尺寸或最小尺寸提示,在这种情况下,拉伸因子是它们的 决定因素。) 分配的空间超过其最大大小的任何小部件都会分配其所需的最大大小空间。 (小部件不 必须有一个最大尺寸,在这种情况下,拉伸因子是它们的 决定因素。)

假设您没有为QListViews 更改sizePolicy,那么它们都具有Expanding 的默认sizePolicy。这意味着,您只需为QGridLayout 中的行设置合适的stretch factors。

如果您使用的是 Qt 设计器,只需单击QGridLayout(或具有QGridLayout 的小部件),然后在属性编辑器中将layoutRowStretch 设置为3,1,2

3,1,2 将第三行设置为第二行占用空间高度的两倍,而第一行将设置为第二行占用空间高度的三倍。

如果您想在没有设计师的情况下这样做,您可以使用setRowStretch,如下所示:

gridLayout.setRowStretch(0, 3);
gridLayout.setRowStretch(1, 1);
gridLayout.setRowStretch(2, 2);

【讨论】:

以上是关于QGridLayout:改变一行的高度的主要内容,如果未能解决你的问题,请参考以下文章

PyQT 按钮在 QGridLayout 中的大小不正确

带 Qt 的动态 QGridLayout(适应小部件大小)

如何制作自适应QGridLayout?

UITextView 内容在增加高度时改变位置

QGridLayout里添加这一个QPushButton怎么让其占两行

使用与具有不同列数的另一个QGridLayout相同的列间距