我有一个 Qt 程序,目前我使用 Qsettings.saveGeometry() 和 Qsettings.saveState() 函数来允许程序恢复用户在上一个 session 中设置的布局。然而,并不是所有的几何体都被保存,只有主窗口而不是子窗口,尤其是停靠窗口的 float 位置和停靠窗口内的表格列宽。
这个线程似乎试图提供一个答案(但在 C++ 而不是 python 中):http://www.qtforum.org/article/38362/save-geometry-of-all-widgets-recursively.html
我正在用 Python 编写代码,我的 C++ 不是很好,所以我不能完全按照上面链接中的示例进行操作。
有谁知道这种方法是否有效?
一般来说,是否可以使用 Qsettings 来存储停靠窗口的 float 位置和表格列宽?
谁能推荐一个基于 python/pyside 的解决方案?
非常感谢。
罗恩
好的伙计们。这是答案。 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')
我是一名优秀的程序员,十分优秀!