QGridLayout:更改行的高度

ett*_*gny 4 c++ user-interface qt

我是qt的新手,现在我的窗口看起来像这样:

*---------* *---------* *---------* *---------* 
|ListView1| |ListView2| |ListView3| |ListView4| 
|         | |         | |         | |         |
*---------* *---------* *---------* *---------* 
*---------------------------------------------*
|                                             |
|                  ListView5                  |
|                                             |
*---------------------------------------------*    
*---------------------------------------------*
|                  GridLayout2                |
|                                             |
*---------------------------------------------*
Run Code Online (Sandbox Code Playgroud)

问题是第二行(ListView5)高于第一行和第三行,而我希望第一行高于第三行,第三行应高于第二行.有办法吗?或者我应该使用gridlayout的其他东西吗?谢谢.

Mik*_*ike 6

我建议您阅读此处的文档,以获取有关在将小部件添加到布局时如何为小部件分配大小的信息:

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

假设你没有更改sizePolicyQListViewS,那么,它们都具有默认sizePolicyExpanding.这意味着,您只需要为行中的行设置合适的拉伸因子QGridLayout.

如果您正在使用Qt设计器,只需单击QGridLayout(或具有该QGridLayout设置的窗口小部件),并在属性编辑器中设置layoutRowStretch为类似的设置3,1,2.

Property Editor截图

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

如果你想在没有设计师的情况下这样做,你可以使用这样的setRowStretch东西:

gridLayout.setRowStretch(0, 3);
gridLayout.setRowStretch(1, 1);
gridLayout.setRowStretch(2, 2);
Run Code Online (Sandbox Code Playgroud)