用户通常希望应用程序记住它的设置(窗口大小和位置,选项等)。跨会话。这些信息通常存储在Windows的系统注册表中,以及macOS和iOS的属性列表文件中。在Unix系统上,由于缺乏标准,许多应用程序(包括KDE应用程序)使用INI文本文件、
QSettings存储设置。每个设置都由一个指定设置名称(键)的QString和一个存储与键关联的数据的QVariant组成。要编写设置,请使用setValue()。举例来说:
settings.setValue("editor/wrapMargin", 68);
如果已经存在具有相同键的设置,则现有值将被新值覆盖。为了提高效率,可能不会立即将更改保存到永久存储。(You可以随时调用sync()来提交更改。
您可以使用value()来获取设置的值:
int margin = settings.value("editor/wrapMargin").toInt();
如果没有指定名称的设置,QSettings将返回空QVariant(可以转换为整数0)。可以通过向value()传递第二个参数来指定另一个默认值:
int margin = settings.value("editor/wrapMargin", 80).toInt();
QSettings提供了静态函数对配置进行读取和设置。
使用vaule读取,value第二个参数可用来指定默认值:
QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString();
使用setValue设置:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->comboBox->setEditable(true);
ui->comboBox->addItems({"9600", "115200"});
ui->comboBox_2->addItems({"8", "7"});
ui->comboBox_3->addItems({"1", "2"});
ui->comboBox_4->addItems({tr("无校验"), tr("奇校验"), tr("偶校验")});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showEvent(QShowEvent *e)
{
QWidget::showEvent(e);
ui->comboBox->setCurrentText(QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString());
ui->comboBox_2->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("databits", 0).toInt());
ui->comboBox_3->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("stopbits", 0).toInt());
ui->comboBox_4->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->comboBox->currentText());
QSettings("config.ini", QSettings::IniFormat).setValue("databits", ui->comboBox_2->currentIndex());
QSettings("config.ini", QSettings::IniFormat).setValue("stopbits", ui->comboBox_3->currentIndex());
QSettings("config.ini", QSettings::IniFormat).setValue("parity", ui->comboBox_4->currentIndex());
// 记录软件关闭前的窗口大小和位置
QSettings settings("config.ini", QSettings::IniFormat);
settings.beginGroup("mainwindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();
QWidget::closeEvent(e);
}
文章评论