Qt - Pyside - .saveGeom() .saveState() (再次)

标签 qt python-3.x pyside

这是对 Qt - pyside - saveGeometry() saveState() 的后续问题

我有一个 Qt 程序,目前我使用 Qsettings 以及 mainWindow.saveGeometry() 和 mainWindow.saveState() 函数来允许程序恢复用户在上一个 session 中设置的布局。

此方法适用于所有停靠窗口的停靠位置。如果窗口在退出时未停靠,它也适用于未停靠窗口的 float 位置。

当用户在 session 中根据自己的需要定制 float 窗口的位置时,停靠和重新 float 窗口会使其成功恢复用户的首选位置。

但是,当用户定制窗口的大小和位置,然后停靠窗口然后退出时,就会出现问题。重新启动后,窗口不会恢复用户首选的 float 位置。

上面链接的其他问题的答案中的建议都没有帮助,因为 QdockWidget 没有任何 getGeom() setGeom() 类型方法。它也没有自己的seveGeometry()restoreGeometry()方法。我想主窗口方法也应该处理停靠小部件。但上述行为达不到所需的功能。

我尝试对 QdockWidget 的 widget() 方法返回的对象使用保存和恢复方法,但这不起作用。 (它修改的是QdockWidget的内容,而不是 float 窗口的位置)

所以我认为我的精致问题是:
1)其他人是否观察到主窗口保存/恢复的上述缺点,或者我可能正在做一些事情来阻止正确恢复停靠窗口。
2)有没有办法获取和设置QdockWidget的 float 几何形状?

最佳答案

好的,伙计们。这就是答案。 Qt 中有一个错误。当主窗口最大化并且 QdocWidget 停靠(不是 float )时, float 位置不会保存。

此代码是一个简单的解决方法。

保存:

settings = QtCore.QSettings(org_name, app_name)
is_floating = main_win._ui.dockWin.isFloating()
settings.setValue('dockWin/isFloating', is_floating)
main_win._ui.dockWin.setFloating(True)
settings.setValue('geometry', main_win.saveGeometry())
settings.setValue('state', main_win.saveState())

恢复:

settings = QtCore.QSettings(org_name, app_name)
main_win.restoreGeometry(settings.value('geometry'))
main_win.restoreState(settings.value('state'))
main_win._ui.dockWin.setFloating(settings.value('dockWin/isFloating')=='true')

关于Qt - Pyside - .saveGeom() .saveState() (再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34975913/

相关文章:

c++ - 如何验证是否选中了多个复选框

python - 如何将一列除以另一列,其中一个数据框的列值对应于 Python Pandas 中另一个数据框的列值?

python - pyside : Children objects not destroyed on close of parent object

python - 从 Pyside 的子窗口获取设置

python - 如何顺序增加for循环

qt - 自定义小部件的占位符

javascript - 在 JS 中使用 LocalStorage

c++ - Excel COM 对象 - 处理工作簿关闭事件

c++ - 拖放操作后事件不起作用

python - Python 3.3 中的 re.sub