「Qtの基礎 - INIファイル」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

編集の要約なし
編集の要約なし
7行目: 7行目:
ウインドウの座標、縦横のサイズ、状態、最少幅、タイトル文字列をSetting.iniファイルに保存する。<br>
ウインドウの座標、縦横のサイズ、状態、最少幅、タイトル文字列をSetting.iniファイルに保存する。<br>
もし、Settings.iniファイルが存在する場合は上書きする。<br>
もし、Settings.iniファイルが存在する場合は上書きする。<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  void MainWindow::saveSetting()
  void MainWindow::saveSetting()
109行目: 110行目:
<br>
<br>
Settings.iniファイルが存在しない場合またはpos等のキー値が無ければ何もしない。<br>
Settings.iniファイルが存在しない場合またはpos等のキー値が無ければ何もしない。<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  bool MainWindow::loadSetting()
  bool MainWindow::loadSetting()

2024年9月7日 (土) 07:20時点における版

概要



INIファイルの書き込み

以下の例では、ソフトウェアにおけるウインドウの状態を保存している。

ウインドウの座標、縦横のサイズ、状態、最少幅、タイトル文字列をSetting.iniファイルに保存する。
もし、Settings.iniファイルが存在する場合は上書きする。

 void MainWindow::saveSetting()
 {
    QSettings settings("settings.ini", QSettings::IniFormat, this);
    settings.beginGroup("MainWindow");
    settings.setValue("pos", pos());
 
    if(!isMaximized())
    {
       settings.setValue("size", size());
    }
 
    settings.setValue("maximized", isMaximized());
    settings.setValue("miniwid", minimumWidth());
    settings.setValue("title", windowTitle());
 
    settings.endGroup();
 }


以下の例では、ソフトウェア終了時に、ウインドウの幅と高さをINIファイルに保存している。

 // mainwindow.cpp
 
 #include <QMessageBox>
 #include <QSettings>
 #include <QSize>
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 
 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
 {
    ui->setupUi(this);
 
    ORG_NAME = "My Company";
    APP_NAME = "My Tool";
 
    QSettings settings(ORG_NAME, APP_NAME);
    int width = settings.value("Window / Width").toInt();
    int height = settings.value("Window / Height").toInt();
 
    this->resize(QSize(width, height));
 }
 
 MainWindow::~MainWindow()
 {
    delete ui;
 }
 
 // ソフトウェアの終了処理は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(ORG_NAME, APP_NAME);
 
    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
 
 private:
     const QString ORG_NAME;
     const QString APP_NAME;
 
 public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
 private:
    Ui::MainWindow *ui;
 
 protected:
    virtual void closeEvent(QCloseEvent *event);
 };
 
 #endif // MAINWINDOW_H



INIファイルの読み込み

以下の例では、前回のウインドウの状態を復元している。
Setting.iniファイルから必要な情報を読み込み、画面の状態を変更する。

Settings.iniファイルが存在しない場合またはpos等のキー値が無ければ何もしない。

 bool MainWindow::loadSetting()
 {
    QSettings settings("settings.ini", QSettings::IniFormat, this);
    settings.beginGroup("MainWindow");
 
    if(settings.contains("pos"))
    {
       move(settings.value("pos", QPoint(50, 40)).toPoint());
    }
 
    if(settings.contains("size"))
    {
       resize(settings.value("size", QSize(800, 720)).toSize());
    }
 
    if(settings.value("maximized").toBool())
    {
       setWindowState(windowState() | Qt::WindowMaximized);
    }
 
    if(settings.contains("miniwid"))
    {
       setMinimumWidth(settings.value("miniwid", 400).toInt());
    }
 
    if(settings.contains("title"))
    {
       setWindowTitle(settings.value("title", "なし").toString());
    }
 
    settings.endGroup();
 }


以下に、設定ファイル(Settings.ini)の内容を示す。
左上位置(46, 15)、画面サイズ(800x600)、最大化(false)、最少幅(400)、画面のタイトルが"サンプル画面"の場合である。

[MainWindow]
pos=@Point(46 15)
size=@Size(800 600)
maximized=false
miniwid=400
title=\x30b5\x30f3\x30d7\x30eb\x753b\x9762