#23.アプリ情報を記録しよう!!
Windows系は、アプリ情報をレジストリに記録したり、.iniファイルに記録したりする。
Qtには、___QSettings___と言う便利なものがある。
これをインクルードして、新しく、読み込み用の___loadWinSetting()___関数と書き込み用の___saveWinSetting()___関数を書いていく。
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QSettings> /* これを追加 */
...省略...
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
loadWinSetting(); /* ここに追加 */
}
MainWindow::~MainWindow()
{
saveWinSetting(); /* ここに追加 */
delete ui;
}
/* この関数を追加 */
void MainWindow::loadWinSetting()
{
QString iniFile = qAppName() + ".ini";
QSettings setting(iniFile, QSettings::IniFormat);
setting.setIniCodec(QTextCodec::codecForName("UTF-8"));
setting.beginGroup("Window");
int state = setting.value("WindowState", 0).toInt();
int left = setting.value("Laft", 0).toInt();
int top = setting.value("Top", 0).toInt();
int width = setting.value("Width", 640).toInt();
int height = setting.value("Height", 480).toInt();
this->setGeometry(left, top, width, height);
switch (state) {
case 2:
this->setWindowState(Qt::WindowMaximized);
break;
case 4:
this->setWindowState(Qt::WindowFullScreen);
break;
default:
this->setWindowState(Qt::WindowNoState);
break;
}
setting.endGroup();
}
/* この関数を追加 */
void MainWindow::saveWinSetting()
{
QString iniFile = qAppName() + ".ini";
QSettings setting(iniFile, QSettings::IniFormat);
setting.setIniCodec(QTextCodec::codecForName("UTF-8"));
setting.beginGroup("Window");
switch (this->windowState()) {
case Qt::WindowNoState:
setting.setValue("WindowState", 0);
setting.setValue("Laft", this->pos().x());
setting.setValue("Top", this->pos().y());
setting.setValue("Width", this->width());
setting.setValue("Height", this->height());
break;
case Qt::WindowMinimized:
setting.setValue("WindowState", 0);
break;
case Qt::WindowMaximized:
setting.setValue("WindowState", 2);
break;
case Qt::WindowFullScreen:
setting.setValue("WindowState", 4);
break;
}
setting.endGroup();
setting.sync();
}
...省略...
C++では、MainWindowクラスに関数を作ると、ヘッダー側にも、定義する必要がある。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
...省略...
class MainWindow : public QMainWindow
{
...省略...
private:
Ui::MainWindow *ui;
...省略...
void loadWinSetting(); /* ここに追加 */
void saveWinSetting(); /* ここに追加 */
};
#endif // MAINWINDOW_H
#24.動作確認!!
画面の左下にある、右三角マークの「実行」ボタンをクリックして、「MainWindow」が出てくる!
一番、初めに起動した時は、デバッグ用のフォルダーには、まだ、hello.iniファイルが存在しない。
従って、value("Width", 640)の二番目の引数の ___640___が効いてくる。
結果、this->___setGeometry(0, 0, 640, 480)___となる。
アプリを閉じた時、その位置とサイズを記録するため、次に起動した時に、その場所を再現する。
[1] アプリを最小化したまま、終了した場合は、ノーマルで再現
[2] アプリを最大化したまま、終了した場合は、最大化を再現
[3] アプリをフルスクリーンで、終了した場合は、フルスクリーンを再現
※ちなみに最大化した状態で、this->pos().x()/y()は、マイナスの値になる。
これは、ウィンドウの枠幅だけ、画面の外に出ていることになる。
#25.QSettingsは、便利!!
数値型や文字列型の他にも、配列型なども記録できる。
Windowsアプリでは「最近、開いたファイル」を記録しておく場合も、これを使う。
他にも、プラグインの情報なども記録できる。
今回は、ここまで次回は、アプリに「アイコン」を設定しよう!!です。