1

我有一个 PyQt 4 应用程序,它有一个 QMainWindow,在左侧和底部停靠区域中有停靠的 QDockWidgets。我目前有两个停靠在左侧和底部的 2 个小部件。我试图弄清楚如何以编程方式移动中央小部件和停靠区域之间的边界,有效地改变停靠区域的宽度(在左侧或右侧区域的情况下)或高度(对于顶部和底部停靠区域)。

我可以用鼠标手动完成;当我将光标移动到中央小部件和停靠区域之间的边界上时,我会得到一个调整大小的句柄,我可以使用它来拉伸停靠区域。我还没有找到一个接口来允许我从我的程序中做到这一点。我尝试手动调整 QDockWidget 对象本身的大小(文档建议不要这样做)和它们包装的小部件(应该可以工作),但这似乎不起作用。有任何想法吗?

具体来说,这种方法不起作用:

dock1.resize(QSize(width, height))
dock2.resize(QSize(width, height))
dock3.resize(QSize(width, height))

这也不是:

dock1.widget().resize(QSize(width, height))
dock2.widget().resize(QSize(width, height))
dock3.widget().resize(QSize(width, height))
4

1 回答 1

7

我想我明白会发生什么。首先是文档中的一些注释。

首先QMainWindow

QMainWindow 有自己的布局,您可以在其中添加 QToolBars、QDockWidgets、QMenuBar 和 QStatusBar。布局有一个中心区域,可以被任何类型的小部件占据。

AQMainWindow有自己的布局管理器,这意味着它将管理其项目的布局。我在文档中找不到任何参考,但我猜布局管理器试图最大化centralWidget. 因此,所有其他元素都缩小到最低限度。

让我们看看QDockWidget

QDockWidget 充​​当其子部件的包装器,使用 setWidget() 设置。应在子小部件中实施自定义尺寸提示、最小和最大尺寸以及尺寸策略。QDockWidget 将尊重它们,调整自己的约束以包括框架和标题。大小约束不应该在 QDockWidget 本身上设置,因为它们会根据它是否停靠而改变;停靠的 QDockWidget 没有框架和较小的标题栏。

所以这意味着你应该改变QDockWidget. 当 aQDockWidget浮动时,它可以根据小部件的要求自由调整大小。但是停靠它将把它留给QMainWindows 布局管理器,它会缩小。

可能最简单的解决方案是在minimumSize里面设置小部件,QDockWidget这样布局管理器QMainWindow就不会缩小它。或者,您可以为您的小部件子类化并重新实现sizeHint方法,以便布局管理器获得首选大小。

简而言之,这应该有效:

dock1.widget().setMinimumSize(QSize(width, height))
dock2.widget().setMinimumSize(QSize(width, height))
dock3.widget().setMinimumSize(QSize(width, height))
于 2012-04-20T23:28:25.630 回答