当小部件集更改时,调整 QWidget 的大小以仅保存当前小部件

Posted

技术标签:

【中文标题】当小部件集更改时,调整 QWidget 的大小以仅保存当前小部件【英文标题】:Resize QWidget to hold just the current widgets, when the set of widgets change 【发布时间】:2015-11-30 19:47:32 【问题描述】:

假设有一个QWidget,其布局是垂直的。此布局有一个按钮 (bt1) 和另一个布局 (hLayout)。

该应用程序工作,以便在 bt1 中单击添加/删除来自 hLayout 的按钮。

第一次添加按钮时,窗口变大(宽度增加)以容纳新按钮。下一次单击隐藏按钮。但是隐藏按钮不会使窗口缩小。我希望与添加按钮之前的大小相同。

删除按钮时正确缩小窗口的方法是什么?或者更一般地说,使窗口大小刚好合适的方法是什么?

【问题讨论】:

【参考方案1】:

hLayout 移除按钮后,只需调用widget->resize(widget->minimumSize())

【讨论】:

【参考方案2】:

只要使用 resize 进行显式大小调整意味着涵盖所有可能的事件,就有更轻巧、更智能的方法可以使小部件自动正确调整大小。看看QWidget::setSizePolicy 和QSizePolicy。

在像你这样的情况下我经常使用:

// your specific code and size policy *may* differ
widget->setMinimumSize(width, height);
widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

并且不要干扰事件处理程序在这种或许多情况下调整到特定大小。

【讨论】:

以上是关于当小部件集更改时,调整 QWidget 的大小以仅保存当前小部件的主要内容,如果未能解决你的问题,请参考以下文章

在调整大小期间保持子类 QWidget 的纵横比

QDockWidget - QGlWidget - 当小部件从停靠栏中拖出时,可绘制无效

在 QWidget 上绘画以覆盖整个小部件

Pyqt QMdiSubWindow 使用可变数量的小部件调整大小

使用 Qt,如何使用向上或向左的鼠标移动事件调整小部件的大小

如何在字体更改时停止 Tkinter Text 小部件调整大小?