5

当我有一个带有网格布局的 QMainWindow 时,当用鼠标调整它的大小时,它不会低于其中所有控件正确显示所必需的最小尺寸。在我的应用程序中,我有时会以编程方式隐藏控件,但随后窗口保持相同大小,其余控件看起来散开,它们之间的空间太大。我最终手动调整了对话框的大小,所以它看起来并不难看。

在隐藏控件后手动调整大小时,我可以通过编程将对话框的垂直大小设置为最小吗?

4

3 回答 3

2

我发现调整大小然后调整本身的centralWidget大小就可以了。换句话说:QMainWindowQMainWindow

from PyQt4 import QtGui
class MyMainWindow(QtGui.QMainWindow):
    def __init__(self):
        # define some widgets and stuff
    def whenWidgetsAreHidden(self):
        # this method should be triggered when you hide your widgets
        self.centralWidget.adjustSize()
        self.adjustSize()

请注意,QMainWindowLayout 中还有其他小部件。根据Qt 文档中的这张图片,还有 Dock Widgets 和其他可能存在的东西。我只使用centralWidget所以这个解决方案对我有用。

QMainWindow 布局

于 2016-05-24T18:31:40.080 回答
1

QLayout::SizeConstraintQWidget::minimumSizeHintQWidget::minimumSize之间存在层次结构,您可以在文档中找到它。

  • QWidget::minimumSize默认情况下未设置。当它存在时,它占了上风 QWidget::minimumSizeHint
  • QWidget::minimumSizeHint如果小部件不在布局中,则无效(意味着可以用鼠标将其大小调整为 0),否则使用布局定义的那个。
  • QLayout::SizeConstraint保存它*直接*管理的小部件的默认布局行为。如果您在 layout 中嵌套A布局B,则添加到的所有小部件都A将使用其属性。此外,如果小部件定义WB自己的布局,则此布局约束将应用于小部件W

知道这一点,请按照以下步骤操作。它可能有效,我没有尝试:):

  • 设置您使用的所有小部件的最小尺寸。
  • 确保所有布局的大小约束设置为QLayout::SetDefaultConstraint.
于 2012-01-08T11:01:53.323 回答
0

这段代码可以解决问题(它只调整高度):

    QWidget widget;
    widget.resize(widget.width(), widget.minimumHeight());
于 2012-01-08T13:52:59.237 回答