QSettings的使用

PART 1

QSettings类是Qt中跨平台的配置信息类,在Application关闭时可以保存必要的数据信息;在程序启动时读取数据,恢复用户设置。在此,做一个小例子来测试其基本使用。

QSettingsDialog即录入用户数据,并且处理数据。

ui文件:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>QSettingsDialog</class>
 <widget class="QDialog" name="QSettingsDialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>315</width>
    <height>111</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="contextMenuPolicy">
   <enum>Qt::NoContextMenu</enum>
  </property>
  <property name="windowTitle">
   <string>QSettingsDialog</string>
  </property>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>10</y>
     <width>294</width>
     <height>85</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
       <layout class="QGridLayout" name="gridLayout_2">
        <item row="0" column="0">
         <widget class="QLabel" name="mLabelName">
          <property name="text">
           <string>Name</string>
          </property>
         </widget>
        </item>
        <item row="0" column="1" colspan="2">
         <widget class="QLineEdit" name="mEditName"/>
        </item>
        <item row="1" column="0" colspan="2">
         <widget class="QLabel" name="mLabelPhoneNum">
          <property name="text">
           <string>PhoneNumber</string>
          </property>
         </widget>
        </item>
        <item row="1" column="2">
         <widget class="QLineEdit" name="mEditPhoneNum"/>
        </item>
       </layout>
      </item>
      <item>
       <spacer name="verticalSpacer">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
          <width>20</width>
          <height>13</height>
         </size>
        </property>
       </spacer>
      </item>
     </layout>
    </item>
    <item>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
       <widget class="QPushButton" name="mBtnReadData">
        <property name="text">
         <string>ReadData</string>
        </property>
       </widget>
      </item>
      <item row="1" column="0">
       <widget class="QPushButton" name="mBtnClear">
        <property name="text">
         <string>Clear</string>
        </property>
       </widget>
      </item>
      <item row="2" column="0">
       <widget class="QPushButton" name="mBtnExit">
        <property name="text">
         <string>Exit</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

具体显示如下:

144852_hryS_48549.png

qsettingsdialog.h文件:

#ifndef QSETTINGSDIALOG_H
#define QSETTINGSDIALOG_H

#include <QDialog>

namespace Ui {
class QSettingsDialog;
}

class QSettingsDialog : public QDialog
{
    Q_OBJECT

public:
    explicit QSettingsDialog(QWidget *parent = 0);
    ~QSettingsDialog();

private:
    //创建信号槽链接
    void setupConnect();
    void clearData();
    //将数据写入QSettings
    void writeToSettings();
    //从QSettings中读取数据
    void readFromSettings();

private:
    Ui::QSettingsDialog *ui;

    const static QString BEGINSTRING;
};

#endif // QSETTINGSDIALOG_H

qsettingsdialog.cpp文件:

#include "qsettingsdialog.h"
#include "ui_qsettingsdialog.h"
#include <QSettings>

const QString QSettingsDialog::BEGINSTRING("part 1");

QSettingsDialog::QSettingsDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::QSettingsDialog)
{
    ui->setupUi(this);

    setupConnect();
    readFromSettings();
}

QSettingsDialog::~QSettingsDialog()
{
    delete ui;
}

void QSettingsDialog::setupConnect()
{
    connect(ui->mBtnReadData, &QPushButton::clicked,
            this, &QSettingsDialog::writeToSettings);
    connect(ui->mBtnClear, &QPushButton::clicked,
            this, &QSettingsDialog::clearData);
    connect(ui->mBtnExit, &QPushButton::clicked,
            qApp, &QApplication::closeAllWindows);
}

void QSettingsDialog::clearData()
{
    ui->mEditName->clear();
    ui->mEditPhoneNum->clear();

    writeToSettings();
}

void QSettingsDialog::writeToSettings()
{
   QSettings settings("Jowei Inc.", "TestSettings", this);
   settings.beginGroup(BEGINSTRING);
   settings.setValue("name", ui->mEditName->text().trimmed());
   settings.setValue("phoneNumber", ui->mEditPhoneNum->text().trimmed());
   settings.endGroup();
}

void QSettingsDialog::readFromSettings()
{
    QSettings settings("Jowei Inc.", "TestSettings", this);
    settings.beginGroup(BEGINSTRING);
    ui->mEditName->setText(settings.value("name").toString().trimmed());
    ui->mEditPhoneNum->setText(settings.value("phoneNumber").toString().trimmed());
    settings.endGroup();
}

当用户点击ReadData按钮时,将文本框中的数据写入到QSettings中。

当用户启动程序时,程序自动从QSettings读取信息,并写入到文本框中

 

18/3/18 添加另一种设置方式

PART 2

不一定非要在初始化QSettings时提供组织名、程序名。也可以提前提供,在初始化时默认使用。

    //设置settings的机构、程序名称,在初始化时自动添加
    QCoreApplication::setOrganizationName("QwSoft");
    QCoreApplication::setApplicationName("Start Runner");

    //初始化settings
    QSettings settings;

    //settings保存设置
    settings.setValue("test", "ABC123");

 

转载于:https://my.oschina.net/weiweiqiao/blog/423026

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值