6

我正在尝试制作一个由 a 组成的应用程序QMainWindow,其中央小部件是 a QToolBar(它可能不常见,但出于我的目的,工具栏非常适合)。仅允许在下方停靠。我在其中添加了 a QDockWidget,并使用和QActionQToolBar切换打开QDockWidget和关闭。removeDockWidget()restoreDockWidget()

的默认大小QMainWindow是 800 x 24,QToolBar'smaximumHeight也设置为 24。在removeDockWidget()被调用之后,QMainWindow的几何图形被设置回(0,0,800,24)with setGeometry()

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

你觉得怎么回事?

这是一个屏幕截图,说明了手头的问题。

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

4

2 回答 2

2

选项

a) 你可以重载 sizeHint() 一个虚函数。让它返回你想要的主窗口大小。

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

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

于 2011-08-16T07:55:38.903 回答
1

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

根据QWidget.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()
于 2011-08-16T21:56:35.230 回答