首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt - Pyside - .saveGeom() .saveState() (再次)

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

Stack Overflow用户
提问于 2016-01-24 12:42:16
回答 1查看 283关注 0票数 1

以下是Qt - pyside - saveGeometry() saveState()的问题

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

这种方法适用于所有对接窗口的停靠位置。它也能很好地工作的浮动位置的非对接窗口,只要窗口是非停靠在出口。

当用户根据会话中的需要调整浮动窗口的位置时,停靠并重新浮动该窗口将使其成功地恢复用户首选的位置。

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

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

我尝试过对QdockWidget的小部件()方法返回的对象使用保存和还原方法,但这不起作用。(它修改了QdockWidget的内容,而不是浮动窗口的位置)

所以我想我的问题是:

( 1)是否有人观察到主窗口保存/恢复的上述缺点,或者我可能正在做些什么来阻止停靠窗口的正确恢复。

( 2)有无获得和设置QdockWidget浮动几何的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-24 17:41:58

好了伙计们。这是答案。Qt中有一个bug。当主窗口最大化,QdocWidget的停靠(非浮动)时,则不保存浮动位置。

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

拯救:

代码语言:javascript
复制
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())

恢复:

代码语言:javascript
复制
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')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34975913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档