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



主要问题

为您的

小部件提供默认大小并确保它们收缩、扩展或在有额外或没有足够的空间容纳它们时保持固定的"正确"方法是什么?

我认为Qt如何工作

阅读 Qt 文档后,似乎大小调整算法是这样的......布局首先通过 QWidget::sizeHint 方法询问其子项的理想大小。如果布局有额外的空间或没有足够的空间,那么它将根据每个小部件的大小调整策略(QWidget::sizePolicy),最小大小(QWidget::minimumSize)和最大大小(QWidget::maxumSize)来确定要调整哪些小部件的大小。

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

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

我正在解决的尺寸问题之一。

我有一个QMainWindow,左手边有一个QDockWidget。QDockWidget 有一个 QTableView。我想让QDockWidget/QTableView在启动时占用"合理"的空间量,然后用户可以调整它的大小,无论他们想要什么大小。

不幸的是,当应用程序启动时,它给QDockWidget/QTableView的空间太小,以至于它需要一个水平滚动条。我发现强制它给它一个合理的宽度的唯一方法是设置 QDockWidget 的最小宽度,但它会阻止用户将其大小调整为他们想要的大小。

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

在我看来,小部件最好根据其内容(或规则)计算其首选大小,而不是允许编码人员设置可能硬编码或至少容易出错的 sizeHint。

我几乎从不需要在小部件上设置大小,使用QSizePolicy就足够了。当我需要一些特定的约束时,使用最小/最大大小就足够了。因此,Qt布局始终能够适应小部件。

如果您想在尺寸等上设置一些百分比,您可以使用拉伸参数。当您需要空白空间时,您还可以添加垫片。

扩展 QWidget 以覆盖 QWidget::sizeHint 方法对我来说听起来并不荒谬,因为您可以通过更改其首选大小来更改小部件行为,这符合 OOD 的多态精神。

如何正确调整Qt小部件的大小?是一个模糊的问题,取决于用例。大多数时候,选择良好的布局和大小策略可以让您实现适应性很强的 GUI。Qt Designer可以帮助做到这一点,即使布局管理并不总是直观的(你需要先放置你的小部件,然后将它们设置在从内部到外部布局的布局中)。


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

  • QDockWidget 起始大小
  • Qt 5.7 QDockWidget 默认大小
  • 防止 QDockWidget 自动调整大小行为

最新更新