首页 > 解决方案 > 添加侧面板而不调整父级的大小

问题描述

PySide2用来写一个gui(没有QtDesigner)。

主窗口包含绘图和其他一些小部件。通过一个菜单选项,我想打开一个侧面板小部件。我希望它工作的方式是整个窗口简单地增长以包含该新小部件,而无需更改主窗口中其他任何内容的大小。如何才能做到这一点?

目前,该小部件刚刚添加到中央布局中addWidget,我也尝试将其设置为 a QDockWidget,但它仍会调整大小(无论如何我想避免使用 DockWidget 带来的额外绒毛)。

所以我有

    ---------
    |content|
    ---------

这应该变成

-------------
|new|content|
-------------

但目前我得到

    ---------
    |new|cnt|
    ---------

标签: pythonqtpyside2

解决方案


在 Qt 的“客户端”端很难做好;这确实属于 Qt 本身。几年前我已经实现了一个稍微更通用的变体,为了让它在 Windows、Mac 和 KDE 上运行良好,代码激增到一千多行以涵盖所有令人讨厌的角落案例,还有一千行用于测试工具。实施测试非常困难——尤其是在 X11 上,无法使用原生 X API 来验证预期行为。我很快就摆脱了那个怪物——这种努力是不必要的。

您可以将侧面板作为一个单独的顶级无框小部件,它可以自行移动,使其右上角与内容窗口的左上角对齐,并垂直调整自身大小以匹配内容窗口的垂直大小. 您当然可以使其稍微短一些(垂直),同时仍将其与内容窗口垂直居中对齐。

您需要捕获内容窗口的调整大小事件来执行此操作:侧面板应将自身安装为内容窗口的事件过滤器。

您希望侧面板成为内容窗口的 Qt 子窗口,需要使其成为顶级窗口,即在其上设置Qt::Window标志,使其成为顶级而不是子小部件的内容窗口。


推荐阅读