根据内容自动调整 window 的大小

Automatically resizing a window based on its contents

我有一个 QDialog 子类,其中包含一个 spacer 作为其唯一的直接子类; window 的所有 UI 元素都包含在 spacer 中。用户无法直接更改 window 大小,但 UI 元素将在用户与 window 交互时显示或隐藏。我希望每次发生这种情况时调整对话框的大小,以便 spacer(和对话框本身)总是占用尽可能少的 space。如何配置对话框和 spacer 以获得所需的行为?

(This question 处理了类似的事情,尽管在那种情况下用户能够调整 window 的大小。我也不清楚 OP 在那种情况下最终做了什么.)

您可以在更改小部件数量后将 window 的大小调整为 minimumSizeHint() :

resize(minimumSizeHint());

这会将 window 缩小到最小尺寸。但是您应该考虑到在事件循环中处理某些事件之前不会计算最小大小。因此,在隐藏了一些小部件并显示了一些小部件之后,只需处理事件循环进行一些迭代,然后将大小调整为最小。

就像:

for(int i=0;i<10;i++)
   qApp->processEvents();

resize(minimumSizeHint());

更好的解决方案是单发一个 QTimer,它调用一个插槽,您可以在其中将 window 的大小调整到最小。这样,当您调整 window 大小时,最小尺寸提示会被正确计算。

void QWidget::adjustSize()

Adjusts the size of the widget to fit its contents.