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

Qt-Pyside-.saveGeom().saveState()(再次),qt,python-3.x,pyside,Qt,Python 3.x,Pyside,这是我的后续问题 我有一个Qt程序,目前我使用Qsettings和mainWindow.saveGeometry()和mainWindow.saveState()函数来允许程序恢复用户在上一个会话中设置的布局 这种方法适用于所有停靠窗口的停靠位置。它也适用于未停靠窗口的浮动位置,前提是窗口在出口处未停靠 当用户在会话中根据自己的需要调整浮动窗口的位置时,停靠和重新浮动窗口会使其成功恢复用户首选的位置 但是,当用户定制了窗口的大小和位置,然后停靠窗口,然后退出时,就会出现问题。重新启动时,窗口不会

这是我的后续问题

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

这种方法适用于所有停靠窗口的停靠位置。它也适用于未停靠窗口的浮动位置,前提是窗口在出口处未停靠

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

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

上面链接的其他问题的答案中没有任何建议是有用的,因为QdockWidget没有任何getGeom()setGeom()类型的方法。它也没有自己的seveGeometry()restoregometry()方法。我猜主窗口方法也应该处理DockedWidget。但上述行为没有达到预期的功能

我已经尝试对QdockWidget的widget()方法返回的对象使用save和restore方法,但这不起作用。(它修改QdockWidget的内容,而不是浮动窗口的位置)

所以我认为我的问题是:
1) 其他人是否注意到主窗口保存/还原的上述缺点,或者我是否正在采取措施阻止正确还原停靠的窗口。

2) 有没有办法获取和设置QdockWidget的浮动几何体?

好的。答案是这样的。Qt中有一个bug。当主窗口最大化且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')

我想我可能看到了一个类似的问题,我看到当
main窗口关闭时最大化时,停靠小部件的大小没有保持其宽度,当它没有最大化时,它会保存并恢复用户大小。当它最大化时,似乎只有当大小小于某个特定大小时才保存/恢复大小?