这是对 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/