QSettings

 

souce code:

 

http://xvjqpg.bay.livefilestore.com/y1pz-TPIsqVWoadE8prA9hTK8oqHizcqVJwT3ZKIy3Ss64efmHmYJCUfTlq1R01w4Ysn8q6aTLdAlZOXF1RKulQKZoYxi1fsckO/QSettings%E4%BF%9D%E5%AD%98%E7%AA%97%E4%BD%93%E8%AE%BE%E7%BD%AE.rar?download

 

QSettings 类提供“持久性”,平台独立的应用程序设置。意思是,程序关闭后QSettings 把窗体大小,位置,用户设置的Option 保存起来,下次

打开程序时再重新加载。


如果你需要的是“非持久性” 基于内存的数据结构,可以考虑使用QMap<QString, QVariant> 代替。


通常,对于Windows,配置信息保存在“注册表”中,Mac OS 是XML 文件,Unix 是INI 文件

 

// 构造函数
QSettings settings("MySoft", "Star Runner");  //  公司或组织名  // 应用程序名

 

QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");  // 专为Mac OS X 准备的
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;


如果要在程序很多地方使用QSettings,用 QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 然后用QSettings 的默认构造函数。

这样,公司或组织名,应用程序名只要指定一次,QSettings settings 到处扔就行。


QSettings 存储了一对键值( Key / value ) ,Key 是一个QString,Value 是一个QVariant


settings.setValue("editor/wrapMargin", 68);  // 添加一对键值

添加键值的时侯,如果Key 已存在,则Value 被重写。


出于效率的原因,setValue 不会立既写入(如注册表,INI, XML), 要立既写入可以用sync() 函数。

 

int margin = settings.value("editor/wrapMargin").toInt();

通过Key,取回Value。如果指定的Key 不存在,QSettings 返回空的QVariant(转成整型是 0)。


// 类型转换
QSettings settings("MySoft", "Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();


// 通过"/" 分组
settings.setValue("mainwindow/size", win->size());
settings.setValue("mainwindow/fullScreen", win->isFullScreen());
settings.setValue("outputpanel/visible", panel->isVisible());


settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("fullScreen", win->isFullScreen());
settings.endGroup();

settings.beginGroup("outputpanel");
settings.endGroup();

 


//  readSettings()  / writeSettings()

 void MainWindow::writeSettings()
 {
     QSettings settings("Moose Soft", "Clipper");

     settings.beginGroup("MainWindow");
     settings.setValue("size", size());
     settings.setValue("pos", pos());
     settings.endGroup();
 }

 void MainWindow::readSettings()
 {
     QSettings settings("Moose Soft", "Clipper");

     settings.beginGroup("MainWindow");
     resize(settings.value("size", QSize(400, 400)).toSize());
     move(settings.value("pos", QPoint(200, 200)).toPoint());
     settings.endGroup();
 }


// readSettings() and writeSettings() 必须分别位于主窗体的构造函数和closeEvent 函数里面。

 MainWindow::MainWindow()
 {
     ...
     readSettings();
 }

 void MainWindow::closeEvent(QCloseEvent *event)
 {
     if (userReallyWantsToQuit()) {
         writeSettings();
         event->accept();
     } else {
         event->ignore();
     }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值