如何正确调整Qt小部件的大小?

6

主要问题

如何给小部件设置默认大小,并确保它们在需要时扩展、收缩或保持固定大小,而不影响布局?

我对Qt的理解

阅读了Qt文档后,似乎Qt的大小算法大致如下:布局从QWidget::sizeHint方法中获取其子项的理想大小。如果布局有额外的空间或者没有足够的空间,则会根据每个小部件的大小策略(QWidget::sizePolicy)、最小大小(QWidget::minimumSize)和最大大小(QWidget::maximumSize)确定调整哪些小部件的大小。

为什么没有QWidget::setSizeHint方法?

如果我的理解接近正确,那么你只需要在每个小部件上设置sizeHint、sizePolicy、maximumSize和minimumSize,一切都会正常工作。那么为什么没有setSizeHint方法?!?!?当然,每次你使用提供所有所需功能的小部件(QTableView, QComboBox等)时,你都可以扩展它并覆盖一个单独的方法,但这听起来绝对是荒谬的。

我正在处理的一个大小问题

我有一个带有QDockWidget的QMainWindow,在左侧。QDockWidget中有一个QTableView。我希望在启动时,QDockWidget/QTableView占用"合理"的空间,以便用户可以将其调整为任意大小。

不幸的是,当应用程序启动时,QDockWidget/QTableView占用的空间非常小,导致需要水平滚动条。我唯一发现的强制它给出一个合理宽度的方法是设置QDockWidget的最小宽度,但这会阻止用户将其缩小到他们想要的大小。


你问了很多问题(还有一些抱怨)。你的实际问题是什么? - jonspaceharper
什么是给您的小部件设置默认大小并确保它们在需要时扩展、收缩或保持固定的“正确”方法?尤其是在我的情况下,默认大小介于最小和最大值之间,或者您根本不想要最小/最大值。 - Ed LaFave
请考虑裁剪掉帖子中的一些无关材料,将重点放在问题本身上。 - jonspaceharper
你使用的Qt版本是什么? - jonspaceharper
我正在使用Qt 4.8(将在不久的将来升级),我重新格式化/编辑了我的帖子,希望它更具吸引力。 - Ed LaFave
你可以从这里开始:http://doc.qt.io/qt-5/layout.html - Dmitry Sazonov
1个回答

4

为什么没有QWidget::setSizeHint方法?

我认为,一个小部件根据其内容(或规则)计算其首选大小,而不是允许编码者设置可能被硬编码或容易出错的sizeHint,这样做要好得多

我几乎从来没有必须在小部件上设置大小,只需使用QSizePolicy进行调整即可。当我需要一些特定的限制时,调整最小/最大大小就足够了。因此,Qt布局总是能够适应小部件。

如果您想在大小等方面设置一些百分比,可以使用stretch参数进行调整。当需要空白处时,还可以添加spacers

继承QWidget以重写QWidget::sizeHint方法对我来说并不荒谬,因为通过更改首选大小来改变小部件的行为,这符合OOD的多态精神。
如何正确调整Qt小部件的大小是一个模糊的问题,取决于使用情况。大多数情况下,选择良好的布局和大小策略可以让您实现非常适应性强的GUI。即使布局管理不总是直观的(您需要先放置小部件,然后从内部到外部布置它们),Qt Designer也可以帮助您正确地完成此操作。

关于您的具体问题,不知道您在窗口中的两个小部件周围布局的细节,很难说出为什么您的QDockWidget会变得太小。也许这是QDockWidget的特定问题:请参见相关问题:


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