0

複数の QDialogs を持つプログラムがあります。ほとんどは固定サイズですが、1 つはサイズ変更可能なエディターです。エディター ダイアログは、QByteArray から復元されたジオメトリを取得します。

私が抱えている問題は、エディターが正しく中央に配置されていないことです。(ウィンドウの x/y 寸法のみ) 通常、エディターはインスタンス化されると左上隅に表示されます。

Editor クラスは、MainWindow で次のようにインスタンス化されます。

Editor e(this);
e.exec();

何らかの理由で、ウィンドウ ジオメトリを復元すると、親に対するエディタの自動センタリングが壊れます。今日、SaveGeometry と RestoreGeometry のコードを実装する前は、エディターは正常に機能していました。

Editor.cpp の SaveGeometry コードは次のとおりです (現在の Editor オブジェクトが破棄される直前に実行されます)。

// Remember current window size
QByteArray geo=saveGeometry();
SettingsManager s;
s.SaveEditorSize(geo);

Editor.cpp の復元コードは次のとおりです (これは、UI の設定、レイアウトの割り当てなどを行う関数の一部です)。

if(!Buffer::editor_geometry.isEmpty()){
    restoreGeometry(Buffer::editor_geometry);
}

誰が問題が何であるか知っていますか?

編集:実際には、前回の場所を覚えていますが、中央に表示されません。

4

1 に答える 1

0

実際、私はこれを解決したと思います。

ウィンドウのジオメトリ全体を保存する代わりに、サイズだけを QSize として保存してみました。エディタが初期化されると、QDialog::Resize() によってサイズが再適用されます。ウィンドウは以前のサイズ記憶しており、本来のように親の中央に配置されたままです。

于 2012-11-04T17:44:38.930 に答える