我有一个QDialog子类,它包含一个间隔符作为它唯一的直接子类;窗口的所有UI元素都包含在间隔符中。用户不能直接更改窗口大小,但当用户与窗口交互时,UI元素会显示或隐藏。我希望每次发生这种情况时都调整对话框的大小,这样间隔符(和对话框本身)总是占用尽可能少的空间。如何配置对话框和间隔符以获得所需的行为?
(这个问题处理了类似的问题,尽管在这种情况下,用户可以调整窗口的大小。我也不清楚OP在那种情况下到底做了什么。)
您可以在更改窗口小部件的数量后将窗口调整为minimumSizeHint()
:
resize(minimumSizeHint());
这将使窗口缩小到最小大小。但是您应该考虑,在事件循环中处理某些事件之前,不会计算最小大小。因此,在隐藏了一些小部件并显示了其他小部件之后,只需处理一些迭代的事件循环,然后将大小调整到最小值。
就像:
for(int i=0;i<10;i++)
qApp->processEvents();
resize(minimumSizeHint());
一个更好的解决方案是单次触发QTimer
,它调用一个插槽,您可以在其中将窗口调整到最小值。这样,当调整窗口大小时,可以正确计算最小大小提示。
void QWidget::adjustSize()
调整小部件的大小以适应其内容。