作成環境について
Qt Creator 4.3.1で、以下の設定で、プロジェクトを作成しております。以下の設定でクラス名、cppファイル名、hファイル名はすべてデフォルトを使用しています。
- Qtウィジェットアプリケーション
- 基底クラスは、QMainWindows
- フォームを生成する
プログラムについて
画面終了時の画面の幅と高さをQSettingsに格納します。
再度、アプリケーションを実行したときに、前回起動時の画面の幅と高さを再現するプログラムです。
修正コードは以下の2か所
- mainwindow.cpp
- mainwindow.h
[mainwindow.cpp]
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QSettings> #include <QSize> const QString ORG_NAME = "My Company"; const QString APP_NAME = "My Tool"; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QSettings settings("My Company", "My Tool"); int width = settings.value("window/width").toInt(); int height = settings.value("window/height").toInt(); this->resize(QSize(width, height)); } MainWindow::~MainWindow() { delete ui; } // Qtでは、closeEventをオーバーライドする事で実現可能です。 void MainWindow::closeEvent( QCloseEvent *event ){ int width = this->geometry().width(); int height = this->geometry().height(); QMessageBox::information(this, "Finish Timing", tr("window width : %1 \nwindow height : %2").arg(width).arg(height)); QSettings settings("My Company", "My Tool"); settings.setValue("window/width", width); settings.setValue("window/height", height); }
[mainwindow.h]
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; protected: virtual void closeEvent( QCloseEvent *event ); }; #endif // MAINWINDOW_H
実行結果
前回の画面サイズが、起動時に再現することができました。
<アプリケーション終了時>
<アプリケーション起動時>