如何让一个Qt小部件随窗口大小自动调整?

107

我希望有一个小的 QFormLayout,它可以随着父窗口小部件的大小而自动调整大小。

我使用Qt Designer中的QWidget模板创建了一个新的.ui文件。我将QFormLayout放置在该'window'内,再将一些控件放置在QFormLayout内。

这一切都运行得很好,但是QFormLayout始终保持在我在Qt Designer中设置的大小。我希望QFormLayout可以填充其父窗口小部件,并随之增长/缩小。

我该如何实现呢?

4个回答

155
在设计师中,激活centralWidget并分配一个布局,例如水平或垂直布局。然后你的QFormLayout将自动调整大小。

Image of Designer

始终确保所有的小部件都有一个布局!否则,该小部件的自动调整大小功能将会失效!

另请参阅

在QtDesigner中,控件坚持过大,不会调整大小


21
QtDesigner有时可能会让人感到有些困惑。 - bastibe
37
谢谢你! :-) 我盯着 QtDesigner(好吧,QtCreator,两者差不多)半个小时,都没搞清楚为什么我的中心部件不能最大化 - 直到我注意到你在回答中圈出的那个小图标上有一个红色的“禁用”标记。只需单击创建器工具栏上的“垂直布局”按钮,问题就解决了。顺便说一句,这是我第一次注意到这个工具栏,很容易忽略... - ssc
9
回复Jens的答案:在Mac上,点击顶层小部件(不一定命名为“centralWidget”),然后在菜单栏中点击“表格”,选择其中一个布局。 - hnasarat
5
如果还有人在疑惑,这是在Windows中使用QT5.8 / QT Creator 4.2.1完成的。方法是单击顶层的“centralWidget”(上面有一个小红标记),然后进入“工具”>“表单编辑器”>“垂直布局”(或水平布局)。 - LeoR

47

我发现在centralwidget中添加至少一个子项之前,无法为其分配布局。然后,我可以突出显示带有红色“禁用”标记的小图标,然后在设计工具栏中单击一个布局。


7
这真是令人恼火。在Qt Creator中,将布局分配给中央小部件应该是最琐碎的操作。相反,这需要将这个高度不直观的解决方案与Jens同样不直观的解决方案(按照这个确切的顺序)结合起来。虽然Qt Creator提供的自动化仍然比重复的样板代码要好得多,但是绕过其令人惊讶的用户体验(UX)使我眼皮跳了一下。 - Cecil Curry
即使使用了那个解决方案,我还是花了20分钟才意识到我应该怎么做...因为只有在没有上下文菜单选项添加布局的情况下,centralWidget 才会出现...只有一个微小的按钮在工具栏中看起来几乎像是不活动的。 - Swift - Friday Pie
4
由于即使在这里提供的解决方案后,我仍然很难找到选项,因此我写下了这个评论。您需要选择centralWidget,然后右键单击应用程序的某个空闲区域,在打开的上下文菜单中选择“Layout”,然后选择您想要的布局。至少对我来说,这个方法是有效的(QT5,使用QT Designer 5.11.1)。 - kushy

12

被接受的答案(它的图片)是错误的,至少在QT5中是这样。相反,您应该将布局分配给根对象/窗口小部件(指上述图像,它应该是MainWindow而不是centralWidget)。还要注意,您必须至少创建一个QObject在其下才能使其工作。这样做,您的UI将响应窗口大小调整。


有两个错误。1. 接受答案的截图清楚地显示了一个QMainWindow,它不能设置布局(它有自己的内部布局,除了中央窗口部件外,还管理菜单栏、状态栏和任何可能的工具栏或停靠窗口);实际上,在设计师中为主窗口设置布局的任何尝试都将导致为中央窗口部件设置布局。2. "QObject"这个术语是错误的:QWidget(以及相关类)继承自QObject,而QObject本身不是一个UI元素。 - musicamante

10

您需要通过按下布局相关的工具栏按钮之一,将顶层QWidget对象的默认布局类型从Break布局类型更改为其他布局类型(垂直布局、水平布局、网格布局、表单布局)。

例如: enter image description here

变成这样:

enter image description here


1
终于弄明白了,而且用了太长时间。请参考Linh Dao图片中的第一张。选择"centralWidget"后,查看图形布局区域上方的工具栏。那里有几个与布局相关的图标。在这里点击以更改centralWidget的布局(它不在任何弹出菜单中)。您将在布局树结构中“centralWidget”的图标的最右边看到变化。现在布局可以正确地调整大小,当窗口大小调整时,元素会被拉伸和收缩。 - Udo Schuermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接