我正在尝试创建一个由QMainWindow
组成的应用程序,其中心窗口小部件是QToolBar
(可能不常见,但出于我的目的,工具栏非常适合)。码头只允许在下面。我向其添加了QDockWidget
,QAction
上的QToolBar
使用QDockWidget
和removeDockWidget()
打开和关闭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特有的。
答案 0 :(得分:2)
选项
a)您可以将sizeHint()重载为虚函数。让它返回主窗口所需的大小。
b)在主窗口的构造函数中,您可以一个接一个地调用setMinimumSize()和setMaximumSize(),两者都具有所需的主窗口大小。如果两者保持一致,则会得到固定的大小。
c)看看layout() - > setResizeMode(Fixed)。
答案 1 :(得分:1)
看起来你误解了QMainWindow.sizeHint()
方法的含义。
根据QWidget.sizeHint()
documentation(QMainWindow
继承):
此属性包含窗口小部件的建议尺寸。
如果此属性的值是无效大小,则不建议使用大小。 如果此窗口小部件没有布局,则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()