删除所有 DockWidget 后如何调整 QMainWindow 的大小?
我正在尝试制作一个由 QMainWindow
组成的应用程序,其中央小部件是 QToolBar
(它可能不常见,但就我的目的而言,工具栏非常适合)。仅允许在下面使用码头。我向其中添加了一个 QDockWidget
,QToolBar
上的 QAction
使用 打开和关闭
和 QDockWidget
>removeDockWidget()restoreDockWidget()
。
QMainWindow
的默认大小是 800 x 24,QToolBar
的 maximumHeight
也设置为 24。调用 removeDockWidget()
后,QMainWindow
的几何形状通过 setGeometry 设置回
。(0,0,800,24)
()
我想要实现的是当DockWidget
被删除时将QMainWindow
的高度调整为24。 setGeometry()
似乎可以工作,因为宽度和位置会相应变化,但有趣的是,高度没有变化。这确实是我的问题:)
你觉得怎么回事?
这是一个屏幕截图,说明了当前的问题。
注意:如果我使用 QWidget 而不是 QMainWindow 创建相同的场景,并在子部件上使用 show()
或 hide()
,那么我可以调整父部件的大小使用 adjustSize()
没有问题:上面的问题似乎是 QMainWindow 特定的。
I’m trying to make an application consisting of a QMainWindow
, the central widget of which is a QToolBar
(it may not be usual, but for my purpose the toolbar’s well suited). Docks are allowed below only. I added a QDockWidget
to it, and a QAction
on the QToolBar
toggles the QDockWidget
on and off with removeDockWidget()
and restoreDockWidget()
.
The default size of the QMainWindow
is 800 by 24, QToolBar
’s maximumHeight
is set to 24 too. Right after the removeDockWidget()
is called, QMainWindow
’s geometry is set back to (0,0,800,24)
with setGeometry()
.
What I want to achieve is to resize the QMainWindow
’s height to 24 when the DockWidget
’s removed. The setGeometry()
seems to work since width and position change accordingly, but funnily enough, the height doesn’t budge. And that’s my problem really :)
What’s the matter you think?
Here is a screen-cast illustrating the issue at hand.
NB: if i create the same scenario using a QWidget rather than QMainWindow, and using a show()
or hide()
on the child widget, then I can resize the parent with adjustSize()
without problem: it seems the problem here above is QMainWindow specific.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
选项
a) 您可以重载 sizeHint() 虚拟函数。让它返回您想要的主窗口大小。
b) 在主窗口的构造函数中,您可以依次调用 setMinimumSize() 和 setMaximumSize(),两者都具有所需的主窗口大小。如果你保持两者相同,你就会得到固定的大小。
c) 看一下layout()->setResizeMode(Fixed)。
Options
a) You can overload sizeHint() a virtual function. Let it return the size you want for your main window.
b) In the main window's constructor you can call setMinimumSize() and setMaximumSize() one after another, both with the the desired main window size. If you keep both same you get a fixed size.
c) Take a look at layout()->setResizeMode(Fixed).
看来您误解了 QMainWindow.sizeHint() 方法的含义。
根据
QWidget.sizeHint()
文档 (QMainWindow
从中继承):要获取窗口的实际大小,您应该使用 QMainWindow.geometry() 方法,该方法提供有关小部件大小和位置的所有信息:
It looks like you misunderstood the meaning of the
QMainWindow.sizeHint()
method.According to
QWidget.sizeHint()
documentation (from whichQMainWindow
inherits):To get the actual size of your window, you should use the
QMainWindow.geometry()
method instead, which gives all the informations about the widget size and position: