多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[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()); } ```