Python 删除所有DockWidget后如何调整QMainWindow的大小?
我正在尝试制作一个由Python 删除所有DockWidget后如何调整QMainWindow的大小?,python,qt4,pyqt,qmainwindow,qdockwidget,Python,Qt4,Pyqt,Qmainwindow,Qdockwidget,我正在尝试制作一个由QMainWindow组成的应用程序,其中心部件是QToolBar(这可能不常见,但对于我来说,工具栏非常适合)。码头只允许在下面。我向它添加了一个QDockWidget,在QToolBar上的QAction通过removeDockWidget()和restoreDockWidget()切换QDockWidget的开关 QMainWindow的默认大小为800乘24,QToolBar的最大高度也设置为24。调用removeDockWidget()后,使用setGeometry
QMainWindow
组成的应用程序,其中心部件是QToolBar
(这可能不常见,但对于我来说,工具栏非常适合)。码头只允许在下面。我向它添加了一个QDockWidget
,在QToolBar
上的QAction
通过removeDockWidget()
和restoreDockWidget()
切换QDockWidget
的开关
QMainWindow
的默认大小为800乘24,QToolBar
的最大高度也设置为24。调用removeDockWidget()
后,使用setGeometry()
将QMainWindow
的几何图形设置回(0,0800,24)
我想要实现的是在删除DockWidget
时将QMainWindow
的高度调整为24。setGeometry()。这就是我的问题:)
你怎么想的
说明眼前的问题
注意:如果我使用QWidget而不是QMainWindow创建相同的场景,并在子窗口小部件上使用show()
或hide()
,那么我可以使用adjustSize()
调整父窗口的大小,没有问题:上面的问题似乎是QMainWindow特有的。选项
a) 可以将sizeHint()重载为虚拟函数。让它返回主窗口所需的大小
b) 在主窗口的构造函数中,可以依次调用setMinimumSize()和setMaximumSize(),这两个函数都具有所需的主窗口大小。如果两者保持不变,就可以得到一个固定的尺寸
c) 看看layout()->setResizeMode(Fixed)。看起来您误解了QMainWindow.sizeHint()方法的含义
根据(从中继承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()
你能给出你代码的链接吗?您使用的是哪个版本的Qt?谢谢。我不太明白你的解释。我曾尝试使用updateGeometry()更改QmainWindow的几何图形,但实际效果不佳。我把上面的代码和输出放在这里,告诉你我的意思。检查我的答案,看看它是否有意义:)@Benjamin。。。您是否尝试过重载sizeHint或调用setMinimumSize()和setMaximumSize()?如果是的话,那么你得到了你想要的尺寸了吗?让我再试一次:我想我在某个地方搞砸了,得出了我以前的结论。好的,我试过:self.setMaximumSize(self.centralWidget().geometry().height(),self.centralWidget().geometry().width())self.setGeometry(self.centralWidget().geometry())
认为应该告诉QMainWindow将其大小设置为最大值以下,在本例中为centralWidget的大小。我还尝试提供显式整数,例如setMaximumSize(45800)
,但尽管它会影响宽度,但QMainWindow的高度不会低于75px。我犯下的关于sizeHint()的错误确实是正确的
。但正如我刚才在回答中解释的那样:几何体仅适用于客户端区域,并且当移除基座时,帧区域不会受到影响。因此设置新几何体是不够的,即使是adjustSize()
也无法更改帧大小。如果您有任何更改帧大小的Qt解决方案,请务必让我知道:)