本文主要總結在Qt中使用簡單配置文件QSetting來存儲和讀取對應內容。其中,QSettings有限制,只能存儲段-鍵值對模式,如果需要更復雜業務,需要進行嵌套或者選擇xml、json等配置文件。
一、原理講解
類QSettings是Qt自帶的,主要有兩個功能,分別是創建讀寫配置文件*.ini、讀寫註冊表。本文主要講解的是讀寫配置文件*.ini作用。
1.1創建或打開配置文件*.ini(QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR);)
//創建和打開配置文件
QSettings *settingWrite=new QSettings(QString("setting.ini"),QSettings::IniFormat); //打開配置文件,不是註冊表
1.2寫配置文件*.ini(void setValue(const QString &key, const QVariant &value);)
//寫配置文件
settingWrite->setValue(QString("段1/key1"),QString("這是段1值1")); //設置段、鍵值對,如果段不存在,則要加一個斜槓/創建
settingWrite->setValue(QString("段1/key2"),QString("這是段1值2"));
settingWrite->setValue(QString("段2/key1"),QString("這是段2值1"));
1.3讀配置文件*.ini(QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;)
//讀配置文件
QString section1Value2 = settingRead->value(QString("段1/key2")).toString(); //設置段、鍵值對
QString section2Value1 = settingRead->value(QString("段2/key1")).toString(); //設置段、鍵值對
二、完整示例代碼
拖拽界面、widget.h、widget.cpp、main.cpp
拖拽界面
widget.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();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QSettings>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
ui->label->setText(QString("鍵%1").arg(rand()));
ui->label->setFixedWidth(150);
ui->lineEdit->setText(QString("值%1").arg(rand()));
}
void Widget::on_pushButton_2_clicked()
{
//創建和打開配置文件
QSettings *settingWrite=new QSettings(QString("setting.ini"),QSettings::IniFormat); //打開配置文件,不是註冊表
//寫配置文件
settingWrite->setValue(QString("段1/key1"),QString("這是段1值1")); //設置段、鍵值對,如果段不存在,則要加一個斜槓/創建
settingWrite->setValue(QString("段1/key2"),QString("這是段1值2"));
settingWrite->setValue(QString("段2/key1"),QString("這是段2值1"));
//釋放內存
delete settingWrite;
settingWrite=nullprt;
}
void Widget::on_pushButton_3_clicked()
{
//創建和打開配置文件
QSettings *settingRead=new QSettings(QString("setting.ini"),QSettings::IniFormat); //打開配置文件,不是註冊表
//讀配置文件
QString section1Value2 = settingRead->value(QString("段1/key2")).toString(); //設置段、鍵值對
QString section2Value1 = settingRead->value(QString("段2/key1")).toString(); //設置段、鍵值對
qDebug()<<"section1Value2=="<<section1Value2<<"section2Value1=="<<section2Value1;
ui->label->setText(QString("/段1/key2"));
ui->lineEdit->setText(section1Value2);
//釋放內存
delete settingRead;
settingRead=nullprt;
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
參考內容: