删除所有DockWidgets后如何调整QMainWindow的大小?

时间:2011-08-11 19:35:33

标签: python qt4 pyqt qmainwindow qdockwidget

我正在尝试创建一个由QMainWindow组成的应用程序,其中心窗口小部件是QToolBar(可能不常见,但出于我的目的,工具栏非常适合)。码头只允许在下面。我向其添加了QDockWidgetQAction上的QToolBar使用QDockWidgetremoveDockWidget()打开和关闭restoreDockWidget()

QMainWindow的默认大小为800 x 24,QToolBar的{​​{1}}也设置为24。在调用maximumHeight之后,removeDockWidget()的几何图形将QMainWindow设置回(0,0,800,24)

我想要实现的是在移除setGeometry()时将QMainWindow的高度调整为24。 DockWidget似乎工作,因为宽度和位置相应地改变,但有趣的是,高度不会让步。这真的是我的问题:)

你觉得怎么回事?

Here is a screen-cast说明了手头的问题。

注意:如果我使用QWidget而不是QMainWindow创建相同的场景,并在子窗口小部件上使用setGeometry()show(),那么我可以使用hide()调整父级的大小问题:上面的问题似乎是QMainWindow特有的。

2 个答案:

答案 0 :(得分:2)

选项

a)您可以将sizeHint()重载为虚函数。让它返回主窗口所需的大小。

b)在主窗口的构造函数中,您可以一个接一个地调用setMinimumSize()和setMaximumSize(),两者都具有所需的主窗口大小。如果两者保持一致,则会得到固定的大小。

c)看看layout() - > setResizeMode(Fixed)。

答案 1 :(得分:1)

看起来你误解了QMainWindow.sizeHint()方法的含义。

根据QWidget.sizeHint() documentationQMainWindow继承):

  

此属性包含窗口小部件的建议尺寸

     

如果此属性的值是无效大小,则不建议使用大小。   如果此窗口小部件没有布局,则sizeHint()的默认实现返回无效大小,否则返回布局的首选大小。

要获得窗口的实际大小,您应该使用QMainWindow.geometry()方法,它会提供有关窗口小部件大小和位置的所有信息:

win_geo = self.geometry()
win_top = win_geo.top()
win_bottom = win_geo.bottom()
win_left = win_geo.left()
win_right = win_geo.right()
win_width = win_geo.width()
win_height = win_geo.height()