python - 添加侧面板而不调整父级的大小
问题描述
我PySide2
用来写一个gui(没有QtDesigner)。
主窗口包含绘图和其他一些小部件。通过一个菜单选项,我想打开一个侧面板小部件。我希望它工作的方式是整个窗口简单地增长以包含该新小部件,而无需更改主窗口中其他任何内容的大小。如何才能做到这一点?
目前,该小部件刚刚添加到中央布局中addWidget
,我也尝试将其设置为 a QDockWidget
,但它仍会调整大小(无论如何我想避免使用 DockWidget 带来的额外绒毛)。
所以我有
---------
|content|
---------
这应该变成
-------------
|new|content|
-------------
但目前我得到
---------
|new|cnt|
---------
解决方案
在 Qt 的“客户端”端很难做好;这确实属于 Qt 本身。几年前我已经实现了一个稍微更通用的变体,为了让它在 Windows、Mac 和 KDE 上运行良好,代码激增到一千多行以涵盖所有令人讨厌的角落案例,还有一千行用于测试工具。实施测试非常困难——尤其是在 X11 上,无法使用原生 X API 来验证预期行为。我很快就摆脱了那个怪物——这种努力是不必要的。
您可以将侧面板作为一个单独的顶级无框小部件,它可以自行移动,使其右上角与内容窗口的左上角对齐,并垂直调整自身大小以匹配内容窗口的垂直大小. 您当然可以使其稍微短一些(垂直),同时仍将其与内容窗口垂直居中对齐。
您需要捕获内容窗口的调整大小事件来执行此操作:侧面板应将自身安装为内容窗口的事件过滤器。
您希望侧面板成为内容窗口的 Qt 子窗口,但您还需要使其成为顶级窗口,即在其上设置Qt::Window
标志,使其成为顶级而不是子小部件的内容窗口。
推荐阅读
- angular4-httpclient - 如何使用 angular4 的 map() 方法,在 package.json 文件中使用 "rxjs": "~6.3.3" 和 "rxjs-compat": "^6.5.2"
- php - 如何在 Directus 7 中添加自定义批处理操作?
- android - Ionic Android 签名产品应用程序执行 REST 请求失败/死机
- jquery - 删除一个类,然后在单击按钮时将一个类添加到列表中的下一个项目
- git - 如何将本地 git 存储库迁移到 github?
- javascript - 如何将数组值传递给函数javascript
- javascript - Nock 不拦截对第 3 方的呼叫
- angular - 具有父子路由的部分反应式表单
- javascript - 按列名在单元格中插入值
- performance - 在查询按日期字符串分区的配置单元表时,使用 between vs '> & <' 有区别吗?