【问题标题】:How to properly size Qt widgets?如何正确调整 Qt 小部件的大小?
【发布时间】:2016-07-14 20:23:34
【问题描述】:

主要问题

如果有额外的空间或没有足够的空间来容纳它们,那么为小部件提供默认大小并确保它们收缩、扩展或保持固定的“正确”方法是什么?

我认为 Qt 的工作原理

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

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

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

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

我有一个 QMainWindow,左侧有一个 QDockWidget。 QDockWidget 有一个 QTableView。我想让 QDockWidget/QTableView 在启动时占用“合理”的空间,然后用户可以根据自己的喜好调整大小。

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

【问题讨论】:

  • 你问了很多问题(并且咆哮了一点)。您的实际问题是什么?
  • 如果有额外的空间或没有足够的空间来容纳它们,那么为小部件提供默认尺寸并确保它们收缩、扩展或保持固定的“正确”方式是什么? ...特别是在我的情况下,默认大小介于最小值和最大值之间,或者您根本不想要最小值/最大值。
  • 考虑剪掉帖子中的一些无关材料,并专注于问题本身。
  • 你使用的是什么版本的 Qt?
  • 我正在使用 Qt 4.8(将在不久的将来升级)并且我重新格式化/编辑了我的帖子,希望它更具吸引力。

标签: qt qwidget qlayout qsizepolicy


【解决方案1】:

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

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

我几乎不需要在小部件上设置大小,使用 QSizePolicy 就足够了。当我需要一些特定的约束时,使用最小/最大尺寸就足够了。这样 Qt 布局总是能够适应小部件。

如果您想为自己设置一些尺寸百分比等,您可以使用stretch 参数。需要空格的时候也可以加spacers。

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

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


关于您的具体问题,如果不了解窗口中两个小部件周围的布局细节,就很难判断为什么 QDockWidget 变得太小。也许这是 QDockWidget 的一个特定问题:请参阅相关问题:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多