Qt配置文件ini操作

介绍

 人们在使用程序的时候,会有一些常用惯用的操作,每次打开程序都要将这些操作做一遍很繁琐。配置文件可以记录一些常用的设置信息,这样就不用每次打开程序,都去重新配置它们。
 ini,Initialization File,是windows的系统配置文件所采用的存储格式。

Qt中简单使用ini

步骤

  1. 创建对象
	QSettings setting(filePath, fileFormat)
  1. 添加键值对(key-value)
	setting.setValue(key, value);
  1. 通过键读取值
	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>


ui
layout

效果

play
配置文件

小结

 一个简单的应用demo,不怎么规范,但桌面级app使用足矣。QSettings这个类其实包含了很多功能,包括跨平台的特性,不过由于使用需要,而且这个本身就是应用型的类,所以不做展开讲。

参考

  • Assistant 5.13.0 (MinGW 7.3.0 64-bit)
发布了60 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/BadAyase/article/details/103871804