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

2024-10-01 11:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个由QMainWindow组成的应用程序,它的中心小部件是QToolBar(这可能不常见,但就我的目的而言,工具栏非常适合)。码头只允许在下面。我添加了一个QDockWidget,而QToolBar上的QActionremoveDockWidget()restoreDockWidget()来切换QDockWidget的开关。在

QMainWindow的默认大小是800x24,QToolBarmaximumHeight也设置为24。在调用removeDockWidget()之后,QMainWindow的几何体被设置回(0,0,800,24),其中setGeometry()。在

我想实现的是在移除^{时将QMainWindow的高度调整为24。由于宽度和位置相应地改变,setGeometry()似乎可以工作,但有趣的是,高度没有变化。这就是我的问题:)

你怎么想的?在

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

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


Tags: 目的应用程序高度部件中心工具栏码头qmainwindow
2条回答

选项

a)可以重载sizeHint()一个虚拟函数。让它返回主窗口所需的大小。在

b)在主窗口的构造函数中,可以依次调用setMinimumSize()和setMaximumSize(),两者都具有所需的主窗口大小。如果你保持两个不变,你就得到了一个固定的尺寸。在

c)查看layout()->;setResizeMode(固定)。在

您似乎误解了QMainWindow.sizeHint()方法的含义。在

根据^{} documentation(由QMainWindow继承):

This property holds the recommended size for the widget.

If the value of this property is an invalid size, no size is recommended. The default implementation of sizeHint() returns an invalid size if there is no layout for this widget, and returns the layout's preferred size otherwise.

要获得窗口的实际大小,您应该使用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()

相关问题 更多 >