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

时间:2016-07-14 20:23:34

标签: qt qwidget qlayout qsizepolicy

主要问题

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

我认为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的最小宽度,但它会阻止用户调整它的大小尽可能小。

1 个答案:

答案 0 :(得分:2)

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

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

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

如果您想在尺寸等方面设置一些百分比,则可以使用stretch参数。您还可以在需要空格时添加spacers

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

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

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