QSettingsの概要
QSettingsクラスは、プラットフォームに依存しない永続的なアプリケーション設定を提供します。
多くの場合、ユーザーは、アプリケーションがセッション間でその設定(ウィンドウのサイズと位置、オプションなど)を記憶していることを期待します。Windowsでは、この情報は通常、システムレジストリに保存され、macOSおよびiOSではプロパティリストファイルに保存されます。Unixシステムでは、標準がない場合、多くのアプリケーション(KDEアプリケーションを含む)がINIテキストファイルを使用します。
QSettingsは、これらのテクノロジを抽象化したものであり、アプリケーション設定を移植可能な方法で保存および復元できます。また、カスタムストレージ形式もサポートしています。
QSettingsのAPIはQVariantに基づいており、最小限の労力でQString、QRect、QImageなどのほとんどの値ベースのタイプを保存できます。
必要なのが非永続メモリベースの構造だけである場合は、QMap <QString、QVariant>の使用を検討してください。
一般的なAPI
親要素を使用して、fileNameという名前のファイルに保存されている設定にアクセスするためのQSettingsオブジェクトを作成します。ファイルがまだ存在しない場合は作成します。formatがQSettings::NativeFormatの場合、fileNameの意味はプラットフォームによって異なります。Unixでは、fileNameはINIファイルの名前です。macOSおよびiOSでは、fileNameは.plistファイルの名前です。Windowsでは、fileNameはシステムレジストリ内のパスです。
formatがQSettings::IniFormatの場合、fileNameはINIファイルの名前です。
QSettings::QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
現在のグループにプレフィックスを追加します。これは、セクションまたはキーと値のペアを開始することとしても理解できます。
void QSettings::beginGroup(const QString &prefix)
QSettings::beginGroupと組み合わせて使用されます。
void QSettings::endGroup()
セットキーの値をvalueに設定します。キーがすでに存在する場合は、前の値を上書きします。
void QSettings::setValue(const QString &key, const QVariant &value)
設定されたキーの値を返します。設定が存在しない場合は、defaultValueが返されます。
デフォルト値が指定されていない場合、デフォルトのQVariantが返されます。
QVariant QSettings::value(const QString &key, const QVariant &defaultValue = QVariant()) const
keyという名前の設定が存在する場合はtrueを返し、存在しない場合はfalseを返します。
bool QSettings::包含(const QString &key) const
inifile.h
ファイル
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void readIni();
void writeIni();
protected:
void closeEvent(QCloseEvent *event) override;
private slots:
void on_btnSetColor_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.cpp売値
#include "widget.h"
#include "ui_widget.h"
#include<QSettings>
#include<QCloseEvent>
#include<QColorDialog>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
readIni();
}
Widget::~Widget()
{
delete ui;
}
void Widget::readIni()
{
QSettings settings("GuiState.ini",QSettings::IniFormat);
settings.beginGroup("MainWindow");
resize(settings.value("size", QSize(400, 400)).toSize());
move(settings.value("pos", QPoint(200, 200)).toPoint());
//设置背景
QPalette pal(this->palette());
pal.setColor(QPalette::Background, settings.value("color", QColor(255,255,255)).value<QColor>());
this->setAutoFillBackground(true);
this->setPalette(pal);
settings.endGroup();
}
void Widget::writeIni()
{
QSettings settings("GuiState.ini",QSettings::IniFormat);
settings.beginGroup("MainWindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();
}
void Widget::closeEvent(QCloseEvent *event)
{
writeIni();
}
void Widget::on_btnSetColor_clicked()
{
QColorDialog colorDialog;
connect(&colorDialog, &QColorDialog::colorSelected, this, [&](QColor curColor){
QSettings settings("GuiState.ini",QSettings::IniFormat);
settings.beginGroup("MainWindow");
settings.setValue("color", curColor);
settings.endGroup();
//设置背景
QPalette pal(this->palette());
pal.setColor(QPalette::Background, curColor);
this->setAutoFillBackground(true);
this->setPalette(pal);
});
colorDialog.exec();
}