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

Qt - Pyside - .saveGeom() .saveState() (again)

这是

的后续问题

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

此方法适用于所有停靠的停靠位置 windows。它也适用于未停靠 windows 的浮动位置,前提是 windows 在退出时未停靠。

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

然而,当用户调整了 window 的大小和位置,然后停靠 window 然后退出时,问题就出现了。重新启动时 window 不会恢复用户首选的浮动位置。

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

我曾尝试对 QdockWidget 的 widget() 方法返回的对象使用保存和恢复方法,但这不起作用。 (修改的是QdockWidget的内容,不是浮动的位置window)

所以我认为我提炼的问题是:
1) 其他人是否观察到 main window save/restore 的上述缺点,或者我可能正在做一些事情来阻止对接 windows 的正确恢复。
2) 有什么方法可以获取和设置QdockWidget的浮动几何图形?

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

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

保存:

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')