私はQDockWidgets
という数字を持っています。すべてが単一のQMainWindow
にドッキングされています。QMainWindowが最大化されているときにQDockWidget :: restoreGeometryが正しく機能しない
私はshowEvent
を上書きしており、ベースクラスに上のイベントを通過した後、私はドックウィジェットのジオメトリを復元しています
void DockWidget::showEvent(QShowEvent* ev)
{
QDockWidget::showEvent(ev);
QByteArray byte_array = settings_.value(id + ".geometry").toByteArray();
LOG("rest: %s", QString(byte_array.toHex()));
QDockWidget::restoreGeometry(byte_array);
}
私は私のドックウィジェットのそれぞれについて、
saveSettings
を呼び出しています私の
QMainWindow::closeEvent
で
私のドックウィジェット」は、
void MainWindow::closeEvent(QCloseEvent* ev)
{
QList<DockWidget*> dock_widgets = findChildren<DockWidget*>();
for (DockWidget* dock_widget : dock_widgets)
dock_widget->saveSettings();
QMainWindow::closeEvent(ev);
}
S saveSettings
機能は、私は、ディスクへsaveGeometry
の結果を記述します。ウィジェットが正しく復元されていない最大化されたときに、私のQMainWindow
は、最大化されていないときに、このながら
void DockWidget::saveSettings()
{
QByteArray byte_array = QDockWidget::saveGeometry();
LOG("save: %s", QString(byte_array.toHex()));
settings_.setValue(id + ".geometry", byte_array);
settings_.sync();
}
がに動作します。
this image私はウィジェットを終了する直前に配置しました。 (インラインで画像が大きすぎるためリンクされています)
this image私のアプリケーションをリロードすると、ウィジェットのジオメトリが正しく読み込まれません。
上記の関数では、保存して読み込んでいるジオメトリ文字列をログに記録することができます。私は、設定が正しく保存され、再び復元し、何とかそれは
がアプリを閉じて正常に動作していないしていることを自分自身に証明されている
。状態を保存:
save: 01d9d0cb000200000000053f000000640000077f000001a00000053f000000640000077f000001a000000000000000000780
は、アプリを開きます。状態を復元:(ここ進データが正確に保存されたものと一致)
rest: 01d9d0cb000200000000053f000000640000077f000001a00000053f000000640000077f000001a000000000000000000780
は何も触れなかった、再びアプリを閉じる:形状が異なっているとして(16進数のデータは、今異なって、マークを参照してください以下)
save: 01d9d0cb000200000000053f000000640000077f0000014e0000053f000000640000077f0000014e00000000000000000780
^ ^
これは、ウィンドウが最大化されていない場合は発生しません。
これはQtのバグですか?正しく機能していませんか?
私はUbuntu 16.04でQt 5.5を使用しています。
ありがとうございました。最初の提案は完全に機能しました。実際に必要な変更は、 'saveGeometry' /' restoreGeometry'の代わりに 'geometry'と' setGeometry'を使うことでした。 –