2

私は Qt プログラムを持っており、現在 Qsettings.saveGeometry() および Qsettings.saveState() 関数を使用して、ユーザーが前のセッションで設定したレイアウトをプログラムが復元できるようにしています。ただし、すべてのジオメトリが保存されるわけではなく、メイン ウィンドウのみが保存され、子は保存されません。特に、ドッキングされたウィンドウのフローティング位置と、ドッキングされたウィンドウ内のテーブルの列幅は保存されません。

このスレッドは答えを提供しようとしているようです (ただし、Python ではなく C++ で): http://www.qtforum.org/article/38362/save-geometry-of-all-widgets-recursively.html

私は Python でコーディングしていますが、私の C++ はあまり良くないので、上記のリンクの例を完全にはたどることができません。

そのアプローチが機能するかどうかは誰にもわかりませんか?

一般に、Qsettings を使用して、ドッキングされたウィンドウのフローティング位置とテーブルの列幅を保存することは可能ですか?

誰かがpython/pysideベースのソリューションを提案できますか?

どうもありがとう。

ロン

4

2 に答える 2

1

わかりました。これが答えです。Qt にバグがあります。メイン ウィンドウが最大化され、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-24T17:33:33.607 に答える