私はQtアプリケーションにQMainWindowを持っています。私はそれを閉じて現在の復元サイズ(最大化されていないときのウィンドウのサイズ)を保存します。これは、復元モードでウィンドウを閉じる(つまり、最大化しない)ときにうまく機能します。しかし、最大化するとウィンドウを閉じると、次にアプリケーションを起動してアプリケーションを復元すると(最大化モードで起動するため)、復元する必要があるサイズは記憶されません。これを行う方法はありますか?Qtのセッション間にウィンドウサイズを保存するにはどうすればよいですか?
答えて
QWidget::saveGeometry機能を使用すると、現在の設定をレジストリに書き込むことができます(レジストリにはQSettingsを使用してアクセスします)。その後、起動時にrestoreGeometry()を使用して前の状態に戻ります。
この問題も発生しました。
できること:ウィンドウのサイズに加えて、最大化の有無を保存します(QWidget::isMaximized()
)。
次にアプリケーションを起動するときは、最初にサイズ(QWidget::resize()
)を設定し、必要に応じて最大化してください(QWidget::showMaximized()
)。復元時には正しいサイズに戻ってください。
は私のために関係なく正常に動作します。質問は5歳なので、Qtアップデートのためだと思います。 –
これまでのすべての回答の組み合わせがFedora 14で必要であることがわかりました。ではなく、が最大化されたときのサイズと位置を保存してください!主に
void MainWindow::writePositionSettings()
{
QSettings qsettings("iforce2d", "killerapp");
qsettings.beginGroup("mainwindow");
qsettings.setValue("geometry", saveGeometry());
qsettings.setValue("savestate", saveState());
qsettings.setValue("maximized", isMaximized());
if (!isMaximized()) {
qsettings.setValue("pos", pos());
qsettings.setValue("size", size());
}
qsettings.endGroup();
}
void MainWindow::readPositionSettings()
{
QSettings qsettings("iforce2d", "killerapp");
qsettings.beginGroup("mainwindow");
restoreGeometry(qsettings.value("geometry", saveGeometry()).toByteArray());
restoreState(qsettings.value("savestate", saveState()).toByteArray());
move(qsettings.value("pos", pos()).toPoint());
resize(qsettings.value("size", size()).toSize());
if (qsettings.value("maximized", isMaximized()).toBool())
showMaximized();
qsettings.endGroup();
}
()、位置設定が...窓を最初に表示する前に
MainWindow mainWindow;
mainWindow.readPositionSettings();
mainWindow.show();
見る...と、これらのイベントハンドラは、必要に応じて設定を更新しています。 (これは、設定への書き込みは、移動中に、すべてのマウスの動きのためのファイルとの理想的なされていないサイズを変更する原因となる。)
void MainWindow::moveEvent(QMoveEvent*)
{
writePositionSettings();
}
void MainWindow::resizeEvent(QResizeEvent*)
{
writePositionSettings();
}
void MainWindow::closeEvent(QCloseEvent*)
{
writePositionSettings();
}
それでも、位置の垂直成分が非常に適切ではない、それは無視しているようですウィンドウのタイトルバーの高さ...誰も私が知っていることに対処する方法を知っている場合:)
画像http://qt-project.org/doc/qt-4.8/application-windows.htmlショーで、geometry.x()
とgeometry.y()
がx()
とy()
に等しくないことを、pos()
と同じです。私の場合は
は、私が使用します。
x()
y()
width()
height()
とで正常にこれらを復元する:最大化するかどう
move()
resize()
- 1. セッション状態を保存するにはどうすればよいですか?
- 2. セッション履歴を保存するにはどうすればいいですか?
- 3. セッション間でインストールを保存するにはどうすればいいですか?
- 4. このPowerShell Web要求をセッションを適切に保存するにはどうすればよいですか?
- 5. 次の作業のためにセッションをライブ保存するにはどうすればよいですか?
- 6. プロットウィンドウのウィンドウサイズを設定するにはどうすればよいですか?
- 7. マナティーカメラビューのウィンドウサイズを変更するにはどうすればよいですか?
- 8. 配列をcodeigniterでセッションに保存するにはどうすればよいですか?
- 9. jQueryでウィンドウサイズを検出するにはどうすればよいですか?
- 10. 選択値をセッション変数に保存するにはどうすればよいですか?
- 11. JavaScript変数をセッション変数に保存するにはどうすればよいですか?
- 12. QT C++でオーディオを録音して保存するにはどうすればよいですか?
- 13. R対話セッションで.pnmプロットを保存するにはどうすればよいですか?
- 14. イメージをカメラロールに保存するにはどうすればよいですか?
- 15. データをSilverlightに保存するにはどうすればよいですか?
- 16. ファイルをfastcoloredtextboxに保存するにはどうすればよいですか?
- 17. オブジェクトをグローバルに保存するにはどうすればよいですか?
- 18. イメージをレルムデータベースに保存するにはどうすればよいですか?
- 19. レーティングをソングに保存するにはどうすればよいですか?
- 20. スタティックデータをLaravelに保存するにはどうすればよいですか?
- 21. iPhoneにplistを保存するにはどうすればよいですか?
- 22. JSONをレディスに保存するにはどうすればよいですか?
- 23. データベースにデータを保存するにはどうすればよいですか?
- 24. Androidにデータを保存するにはどうすればよいですか?
- 25. キャンバスをイメージオブジェクトに保存するにはどうすればよいですか?
- 26. UIImageをファイルに保存するにはどうすればよいですか?
- 27. NSUSerDefaultsにMPMediaItemCollectionを保存するにはどうすればよいですか?
- 28. イメージをJSONに保存するにはどうすればよいですか?
- 29. 中間データを保存してSQLクエリ間で共有するにはどうすればよいですか?
- 30. ウィジェットのデータを保存するにはどうすればよいですか?
QWidget :: saveState() – mtbkrdave
残念ながら、2番目のモニタに最大化されたウィンドウがある場合は、この方法では機能しません少なくともWindows 7では)。復元後のジオメトリは、最初のモニタでウィンドウを最大化します。私はこれを解決するためにiforce2dの答えに似たアプローチを使用します。 –
注: 'QWidget :: saveState()'はこれ以上ありません。少なくとも、それはQt 4.8または5.7にはありません。 'saveState()'は 'QMainWindow'にのみ存在するようです。 – Len