QSettings
最后更新于:2022-04-02 02:15:28
[TOC]
## 概述
常用函数
```
QSettings(const QString & organization, const QString & application = QString(), QObject * parent = 0) // organization 是组织机构或公司名称,application 是应用程序名称,parent 是父对象指针。
void QSettings::setValue(const QString & key, const QVariant & value)
bool QSettings::contains(const QString & key) const // 是否存在key
QVariant QSettings::value(const QString & key, const QVariant & defaultValue = QVariant()) const
```
**不同系统的配置存放位置**
- 如果是 Unix/Linux 系统,一般保存在文件 $HOME/.config/organization/application.conf ;
- 如果是苹果操作系统,一般保存在文件 $HOME/Library/Preferences/com.organization.application.plist ;
- 如果是 Windows 系统,一般保存在注册表 HKEY\_CURRENT\_USER\\Software\\organization\\application 树形目录里面。
**保存和加载配置**
1. 程序主界面关闭时,会调用重载的虚函数 closeEvent() ,我们重载基类的 closeEvent() 函数
2. 在程序启动时,可以在主界面的构造函数里添加 读取配置项
## 设置配置路径
为了防止配置被覆盖,需要设置组织名等
方式一:
在app中设置组织名,就会以此为准
```
a.setOrganizationName("objectlearning");
a.setOrganizationDomain("objectlenarning.net");
a.setApplicationName("mainwindow-test");
```
方式二:
使用构造函数
```
QSettings(const QString &organization, const QString &application = QString(), QObject *parent = Q_NULLPTR)
```
## 示例
### win 读写注册表
```
QSettings settings("MySoft", "Star Runner");
settings.setValue("editor/wrapMargin", 68);
int margin = settings.value("editor/wrapMargin").toInt();
```
### ini 读写配置
```
QSettings set("big.ini",QSettings::IniFormat);
set.beginGroup("hello");
set.setValue("asd","1111");
set.endGroup();
set.beginGroup("hello1");
set.setValue("asd1","2222");
set.endGroup();
```
### 保存客户端退出前的状态
```
void MainWindow::readSettings()
{
QSettings set;
QByteArray geometry = set.value("geometry").toByteArray();
QByteArray state = set.value("state",QByteArray()).toByteArray();
restoreState(state);
restoreGeometry(geometry);
}
void MainWindow::closeEvent(QCloseEvent *event)
{
int res = QMessageBox::information(this,
tr("提示"),
tr("你确定退出该软件?"),
tr("取消"),tr("确定"),
0,1);
if(res==1){
writeSettings();
event->accept();
}else{
event->ignore();
}
}
void MainWindow::writeSettings()
{
QSettings set;
set.setValue("geometry",saveGeometry());
set.setValue("state",saveState());
}
```
';