0
点赞
收藏
分享

微信扫一扫

Qt | 配置文件QSetting的使用方法


Qt | 配置文件QSettings的使用方法

1、简介

配置文件常见的作用是启动软件是保留上次软件退出是的界面状态,如果不保留配置,且软件界面的内容又比较多,重启软件后界面恢复默认,那么每次打开界面都需要重新设置,这样比较麻烦,所以可以使用配置文件进行保存,软件启动的时候自动加载。

2、QSettings类的使用

Qt提供了QSetting类对配置进行管理,可以显示的指定为ini格式的配置文件,如果不显示的指定,则默认为:

  • windows系统,在注册表中(注册表位置:计算机\HKEY_CURRENT_USER\Software\软件名称)
  • maxos系统,在xml文件中
  • unix系统,在ini文件中

QSettings提供了静态函数对配置进行读取和设置。

使用vaule读取,value第二个参数可用来指定默认值:

QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString();

使用setValue设置:

QSettings("config.ini", QSettings::IniFormat).setValue("baudrate", ui->baudrateComboBox->currentText());

除此之外还可以利用beginGroup和endGroup进行分组,这样对配置文件进行管理比较规范;使用beginReadArray、beginWriteArray、endArray对数组进行读写。

3、使用示例

对配置文件见得保存和写入比较规范的做法是覆写窗体的closeEvent和showEvent函数。

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

ui->baudrateComboBox->setEditable(true);
ui->baudrateComboBox->addItems({"9600", "115200"});
ui->databitsComboBox->addItems({"8", "7"});
ui->stopbitsComboBox->addItems({"1", "2"});
ui->parityComboBox->addItems({tr("无校验"), tr("奇校验"), tr("偶校验")});
}

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

void MainWindow::showEvent(QShowEvent *e)
{
QWidget::showEvent(e);

ui->baudrateComboBox->setCurrentText(QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString());
ui->databitsComboBox->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("databits", 0).toInt());
ui->stopbitsComboBox->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("stopbits", 0).toInt());
ui->parityComboBox->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("parity", 0).toInt());

// 恢复上次关闭软件时的窗口大小
QSettings settings("config.ini", QSettings::IniFormat);
settings.beginGroup("mainwindow");
resize(settings.value("size").toSize());
move(settings.value("pos", pos()).toPoint());
settings.endGroup();
}

void MainWindow::closeEvent(QCloseEvent *e)
{
QSettings("config.ini", QSettings::IniFormat).setValue("baudrate", ui->baudrateComboBox->currentText());
QSettings("config.ini", QSettings::IniFormat).setValue("databits", ui->databitsComboBox->currentIndex());
QSettings("config.ini", QSettings::IniFormat).setValue("stopbits", ui->stopbitsComboBox->currentIndex());
QSettings("config.ini", QSettings::IniFormat).setValue("parity", ui->parityComboBox->currentIndex());

// 记录软件关闭前的窗口大小和位置
QSettings settings("config.ini", QSettings::IniFormat);
settings.beginGroup("mainwindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();

QWidget::closeEvent(e);
}


举报

相关推荐

0 条评论