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