2012-04-28 29 views
2

我有一个很好的Qt设计的布局,但只要我点击父窗口并将其设置为网格布局,事情就会变得无足轻重。我已经阅读了我可以找到的每个教程以及Qt设计器手册,并且无法弄清楚为什么会发生这种情况。我附上了截图以显示问题: enter image description hereQt布局大于它应该是

正如您所看到的,左侧的垂直布局坚持要比它包含的孩子宽。标签和树视图都设置为sizePolicy最大值,最大宽度设置为260px。孩子们自己保持正确的大小,但是包含它们的垂直布局却没有。

中间的垂直布局设置为展开,最右侧的布局设置与左侧的布局相同,只是看起来工作正常。我如何使第一个垂直布局符合它的儿童宽度?另外,如果我可能潜入第二个问题,我在右下方的选项卡窗口小部件中有一个QTextEdit,但它不会占用完整选项卡视图的空间。你不能在屏幕截图中看到它,但是如果我将tabview向上拉,它内部的textedit不会与它拉伸。我如何使它符合标签的大小?它已经被设置为sizePolicy扩展,但这似乎没有帮助。

+0

至于你的第二个问题,你有没有尝试将尺寸策略设置为“MinimumExpanding”? – Anthony 2012-04-28 15:01:29

+1

是的,不幸的是我已经尝试了所有的设置。这令人沮丧。编写这个简单的布局应该不会花费我更长的时间,而不是为编辑器编写代码。 – John 2012-04-28 16:11:00

回答

3

问题很可能是您需要尝试“拉伸”布局。拉伸设置布局单元的大小相互之间的关系。默认值为0,这意味着不会发生拉伸。

对于你的情况,我相信你想要设置第一列(第0列)的延伸为0,第二列和第三列的延伸为1.这意味着第一列总是一样小尽可能地,第二和第三列将尽可能宽。

您可以很容易地以编程方式设置拉伸;例如,要设置的第一列伸展0:

layout->setColumnStretch(0, 0); 

在Qt设计师可以访问的列和行作为伸展任何正常性能。

+0

其实我错过了,第二和第三列是垂直分离器,我没有意识到分离器没有继承布局。如果我删除分离器,一切工作正常。但我想让他们在那里。我将第一列的布局设置为拉伸0,中间列分隔符设置为展开,但似乎不起作用。理想情况下,我希望在水平分离器中有三列,但事情真的很奇怪。有没有办法继续使用分离器?该文件是可怕的。 – John 2012-04-28 16:08:54

+0

@John对于QSplitter有一个函数“setStretchFactor”,我相信会做你想做的。我不知道它是否可以从Qt Designer访问。我自己实际上并不使用Qt Designer。坏消息是,如果你想要这种功能,你可能不得不以编程方式放置一切。好消息是它并不像听起来那么困难。 – Anthony 2012-04-28 16:43:56

+0

我终于明白了。你的回答是正确的。分离器的拉伸处于尺寸控制下。我不得不将中间分离器的伸展量设置为2,将外部分解器的伸展量设置为0.秘密是分离器中的所有孩子也必须设置为2的伸展量。它仍然看起来像我需要在代码中设置分隔符的位置,但我现在有一个可用的UI。谢谢! – John 2012-04-28 20:29:48