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

Jas*_*n R 1 python qt4 pyqt4

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

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

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

dock1.resize(QSize(width, height))
dock2.resize(QSize(width, height))
dock3.resize(QSize(width, height))
Run Code Online (Sandbox Code Playgroud)

这也不是:

dock1.widget().resize(QSize(width, height))
dock2.widget().resize(QSize(width, height))
dock3.widget().resize(QSize(width, height))
Run Code Online (Sandbox Code Playgroud)

Ava*_*ris 6

我想我明白会发生什么.首先来自文档的几个注释.

第一QMainWindow:

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

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

让我们来看看QDockWidget:

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

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

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

简而言之,这应该工作:

dock1.widget().setMinimumSize(QSize(width, height))
dock2.widget().setMinimumSize(QSize(width, height))
dock3.widget().setMinimumSize(QSize(width, height))
Run Code Online (Sandbox Code Playgroud)