以下是Qt - pyside - saveGeometry() saveState()的问题
我有一个Qt程序,目前我使用q设置和mainWindow.saveGeometry()和mainWindow.saveState()函数来允许程序恢复用户在上一次会话中设置的布局。
这种方法适用于所有对接窗口的停靠位置。它也能很好地工作的浮动位置的非对接窗口,只要窗口是非停靠在出口。
当用户根据会话中的需要调整浮动窗口的位置时,停靠并重新浮动该窗口将使其成功地恢复用户首选的位置。
但是,当用户定制窗口的大小和位置,然后停靠窗口,然后退出时,就会出现问题。重新启动时,窗口不会恢复用户首选的浮动位置。
上面链接的其他问题的答案中的任何建议都没有帮助,因为QdockWidget没有任何getGeom() setGeom()类型方法。它也没有自己的seveGeometry() restoreGeometry()方法。我想主要的窗口方法也应该负责停靠小部件。但上述行为没有达到预期的功能。
我尝试过对QdockWidget的小部件()方法返回的对象使用保存和还原方法,但这不起作用。(它修改了QdockWidget的内容,而不是浮动窗口的位置)
所以我想我的问题是:
( 1)是否有人观察到主窗口保存/恢复的上述缺点,或者我可能正在做些什么来阻止停靠窗口的正确恢复。
( 2)有无获得和设置QdockWidget浮动几何的方法?
发布于 2016-01-24 17:41:58
好了伙计们。这是答案。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')https://stackoverflow.com/questions/34975913
复制相似问题