首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt - pyside - saveGeometry() saveState()

Qt - pyside - saveGeometry() saveState()
EN

Stack Overflow用户
提问于 2016-01-11 23:12:09
回答 2查看 1.4K关注 0票数 2

我有一个Qt程序,目前我使用Qsettings.saveGeometry()和Qsettings.saveState()函数来允许程序恢复用户在上一次会话中设置的布局。然而,并不是所有的几何图形都被保存,只有主窗口,而不是子窗口,特别是停靠窗口的浮动位置和停靠窗口内的表列宽度。

这个线程似乎试图提供一个答案(但是在C++而不是python中):http://www.qtforum.org/article/38362/save-geometry-of-all-widgets-recursively.html

我正在用Python编写代码,而且我的C++不是很好,所以我不能在上面的链接中完全遵循这个示例。

有人知道这种方法是否有效吗?

一般来说,是否可以使用Q设置来存储停靠窗口和表列宽度的浮动位置?

有人能提出一种基于python/pyside的解决方案吗?

非常感谢。

罗恩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-24 17:33:33

好了伙计们。这是答案。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')
票数 1
EN

Stack Overflow用户

发布于 2016-01-12 09:52:45

这个线程似乎试图提供一个答案(但是在C++而不是python中):http://www.qtforum.org/article/38362/save-geometry-of-all-widgets-recursively.html

正如three_pineapples所指出的,迭代所有小部件不是一个好主意,因为您不想保存的东西(按钮、标签)也是从QWidget派生出来的。

我建议简单地给每个浮动的停靠窗口取有意义的名字:

代码语言:javascript
复制
floatingWindow.setObjectName("floatingWindow")

然后,您可以迭代对象名称,而不是从子对象中寻找小部件。要为该特定窗口创建QSettings组,请执行以下操作:

代码语言:javascript
复制
QSettings settings
# Write geometry
settings.setValue("floatingWindow/size", floatingWindow.size())
settings.setValue("floatingWindow/pos", floatingWindow.pos())
# Read geometry
floatingWindow.setSize(settings.value("floatingWindow/size").toSize())
floatingWindow.setPos(settings.value("floatingWindow/pos").toPos())

您可以通过使用常见的名称模式(例如floatingMainfloatingToolsfloatingMenu )来简化这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34732872

复制
相关文章

相似问题

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