介绍
人们在使用程序的时候,会有一些常用惯用的操作,每次打开程序都要将这些操作做一遍很繁琐。配置文件可以记录一些常用的设置信息,这样就不用每次打开程序,都去重新配置它们。
ini,Initialization File,是windows的系统配置文件所采用的存储格式。
Qt中简单使用ini
步骤
- 创建对象
QSettings setting(filePath, fileFormat)
- 添加键值对(key-value)
setting.setValue(key, value);
- 通过键读取值
setting.value(key);
Note: 想包含子键也很简单,只需要在输入的key字符串当中,加入反斜杠’\‘分隔就行。windows上,’\‘被QSettings转换成’/’,这使得它们相同。
setting.setValue("parentKey/childKey", "5");
这样,将会在配置中看到,
[parentKey]
childKey=5
代码
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSettings>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_add_clicked();
void on_pushButton_read_clicked();
private:
Ui::MainWindow *ui;
QSettings *m_settings;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSettings>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_settings = new QSettings("./config.ini", QSettings::IniFormat);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_add_clicked()
{
m_settings->setValue(ui->lineEdit_key->text(), ui->lineEdit_value->text().toInt());
}
void MainWindow::on_pushButton_read_clicked()
{
ui->textBrowser->append(QString("%1:%2").arg(ui->lineEdit_key->text()).arg(m_settings->value(ui->lineEdit_key->text()).toString()));
}
mainwindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>497</width>
<height>367</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout_display">
<item>
<widget class="QTextBrowser" name="textBrowser"/>
</item>
</layout>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_input">
<item row="4" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit_key">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton_add">
<property name="text">
<string>添加</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_value">
<property name="text">
<string>数据(value)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_value">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="4" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_key">
<property name="text">
<string>键值(key)</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="pushButton_read">
<property name="text">
<string>读取配置</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>497</width>
<height>23</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
效果
小结
一个简单的应用demo,不怎么规范,但桌面级app使用足矣。QSettings这个类其实包含了很多功能,包括跨平台的特性,不过由于使用需要,而且这个本身就是应用型的类,所以不做展开讲。
参考
- Assistant 5.13.0 (MinGW 7.3.0 64-bit)