如何更改QDockWidgetArea中所有QDockWidgets的宽度/高度?

时间:2012-04-20 21:08:14

标签: python qt4 pyqt4

我有一个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))

1 个答案:

答案 0 :(得分:6)

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

首先QMainWindow

  

QMainWindow有自己的布局,你可以添加QToolBars,   QDockWidgets,QMenuBar和QStatusBar。布局有一个中心   任何类型的小部件都可以占用的区域。

QMainWindow有自己的布局管理器,这意味着它将管理其项目的布局。我在文档中找不到任何引用,但我想布局管理器会尝试最大化centralWidget的区域。因此,所有其他元素都缩小到最低限度。

让我们看看QDockWidget

  

QDockWidget充当其子窗口小部件的包装器,设置为   setWidget()。自定义尺寸提示,最小和最大尺寸和尺寸   策略应该在子窗口小部件中实现。 QDockWidget会   尊重他们,调整自己的约束,包括框架和   标题。不应在QDockWidget本身上设置大小约束,   因为它们的变化取决于它是否停靠;一个停靠   QDockWidget没有框架和较小的标题栏。

所以这意味着你应该改变QDockWidget里面小部件的大小。当QDockWidget浮动时,可以根据窗口小部件的要求自由调整大小。但是对接它会将其留给QMainWindow布局管理器,它会缩小。

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

简而言之,这应该有效:

dock1.widget().setMinimumSize(QSize(width, height))
dock2.widget().setMinimumSize(QSize(width, height))
dock3.widget().setMinimumSize(QSize(width, height))