如何以编程方式将QMainWindow调整为最小大小

时间:2012-01-08 08:39:10

标签: c++ qt qt-creator resize qlayout

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

我可以以编程方式将对话框的垂直大小设置为我在隐藏控件后手动调整大小时得到的最小值吗?

3 个答案:

答案 0 :(得分:2)

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

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中还有其他小部件。根据{{​​3}}的这张图片,还有Dock Widgets和其他可能存在的东西。我只使用centralWidget,所以这个解决方案对我有用。

Qt Documentation

答案 1 :(得分:1)

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

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

知道这一点,请按照以下步骤操作。 可能工作,我没试过:):

  • 设置您使用的所有小部件的最小大小。
  • 确保所有布局的大小限制设置为QLayout::SetDefaultConstraint

答案 2 :(得分:0)

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

    QWidget widget;
    widget.resize(widget.width(), widget.minimumHeight());