我有一个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的解决方案吗?
非常感谢。
罗恩
发布于 2016-01-24 17:33:33
好了伙计们。这是答案。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')发布于 2016-01-12 09:52:45
这个线程似乎试图提供一个答案(但是在C++而不是python中):http://www.qtforum.org/article/38362/save-geometry-of-all-widgets-recursively.html
正如three_pineapples所指出的,迭代所有小部件不是一个好主意,因为您不想保存的东西(按钮、标签)也是从QWidget派生出来的。
我建议简单地给每个浮动的停靠窗口取有意义的名字:
floatingWindow.setObjectName("floatingWindow")然后,您可以迭代对象名称,而不是从子对象中寻找小部件。要为该特定窗口创建QSettings组,请执行以下操作:
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())您可以通过使用常见的名称模式(例如floatingMain、floatingTools、floatingMenu )来简化这一点。
https://stackoverflow.com/questions/34732872
复制相似问题