保存应用程序设置(QSettings)
admin
2023-02-16 20:00:10
0

保存应用程序设置(QSettings)

1.   QSettings 类

 

  • QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等。

 

  • 在 Windows 系统中,程序程序的状态信息记录在注册表中;在 Mac OS X 系统上,这些信息记录在 XML 配置文件中;在 Unix 系统中,则使用 INI text 文件记录。QSettings 则是对这些技术的一个抽象,使得保存和取得应用程序的设置状态的只得独立于操作系统。

 

  • QSettings 的 API 是基于 QVariant 类,当创建一个 QSettings 对象时,必须传递公司或组织的名称(QString)和应用程序的名称(QString)用于构造一个 QSettings 对象。

 

2.   使用 QSettings

 

(1)构造一个 QSettings 对象

 

  • QSettings settings("MySoft", "Star Runner") ;

 

(2)添加一个设置到 settings 中

 

  • 程序的设置是以“key-value”的形式,保存在 QSettings 对象中的。其中,key 由一个 QString 类型定义,value 是由 QVariant 类型定义:

 

  • settings.setValue( "editor/wrapMargin", 68 ) ;

         /*  wrapMargin 是一个子 key

         /*  如果存在相同的 key,那么已存在的 key 所对应的值将由新值代替

 

(3)从 setttings 中取出设置

 

  • 同时也可以通过 key 从 settings 中取出值:

 

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

 

3.   QSettings 的组织方式

 

(1)用“/”表示子 key

 

  • QSettings 存储状态信息的形式是 key-value,其中 key 与文件路径这个概念是类似的,subkey 可以用定义文件路径的形式定义,例如 findDialog/ matchCase,其中 matchCase 就是一个 subkey;

 

(2)使用 beginGroup( ) 和 endGroup( ) 

 

  • void QSettings : : beginGroup( const QString &prefix ) 的作用是在当前的 group 后面加上 prefix。当前的 group 自动加到一个 QSettings 对象的尾部:

 

settings.beginGroup("mainwindow") ;

settings.setValue("size", win->size( ) ) ;

settings.setValue("fullScreen", win->isFullScreen( ) ) ;

settings.endGroup( ) ;

 

settings.beginGroup("outputpanel") ;

settings.setValue("visible", panel->isVisible( ) ) ;

settings.endGroup( ) ;

 

  • 这样设置后,当前的 settings 对象看上去应该是这样的层次结构:

 

mainwindow/ size

mainwindow/ fullScreen

outputpanel/ visible

 

(3)取得 key 与子 key

 

  • QStringList QSettings : : childKeys( ) const 函数返回所有顶层 keys,组成一个 QStringList 作为一个返回值。例如:

 

QSettings settings ;

settings.setValue("fridge/color", Qt::white) ;

settings.setValue("fridge/size", QSize(32, 96) ) ;

settings.setValue("sofa", true) ;

settings.setValue("tv", false) ;

QStringList keys = settings.childKeys( ) ;

 

  • 那么这个 keys 中看上去应该是这样的:

 

  • keys: [ "sofa", "tv" ]

 

  • QStringList QSettings : : childGroups ( ) const 是返回所有包含有 key 的顶层 groups,组成一个 QStringList 作为返回值:

 

QSettings settings ;

settings.setValue("fridge/color",Qt::white); 

settings.setValue("fridge/size",QSize(32,96)); 

settings.setValue("sofa",true); 

settings.setValue("tv",false);

QStringList groups = settings.childGroups() ;

 

  • 则 groups 看上去是:

  • groups : [ "fridge" ]

 

4.   保存和取得程序的设置

 

(1)在主窗口的构造函数中,readSettings( )

 

void MainWindow::readSettings()
{
   QSettings settings("Software Inc.", "Spreadsheet");   // 写入与读取的 settings 要一致

   restoreGeometry(settings.value("geometry").toByteArray());

   recentFiles = settings.value("recentFiles").toStringList();
   updateRecentFileActions();

   bool showGrid = settings.value("showGrid", true).toBool();
   showGridAction->setChecked(showGrid);

   bool autoRecalc = settings.value("autoRecalc", true).toBool();
   autoRecalcAction->setChecked(autoRecalc);
}

 

(2)在关闭主窗口时,writeSettings( )

 

void MainWindow::writeSettings()
{
   QSettings settings("Software Inc.", "Spreadsheet");

   settings.setValue("geometry", saveGeometry());
   settings.setValue("recentFiles", recentFiles);
   settings.setValue("showGrid", showGridAction->isChecked());
   settings.setValue("autoRecalc", autoRecalcAction->isChecked());
}

/* 这


相关内容

热门资讯

河北一演唱会音响“翻车”,人声... 近日,来自北京的庞女士向都市现场记者反映,她7月11日在河北唐山观看“青春超燃巨星演唱会”时遭遇了极...
尺素金声|中国经济“失速论”站... 一季度GDP同比增长5.0%、二季度增长4.3%、上半年增长4.7%,2026年中国经济半年报发布后...
NVIDIA最深的护城河要凉!... 7月24日消息,AMD在Advancing AI预简报会上表示,CUDA已不再是外界想象中的那条护城...
廖杰远:三大智能体协同闭环,A... 中国日报网7月24日电 7月22日,在2026年世界互联网大会数字丝路发展论坛数智健康分论坛上,微医...
AI时代构筑超级底座 维谛技术... 文/本报记者 当前,人工智能产业竞争持续向产业链上游延伸,算力竞争早已不再局限于计算芯片性能比拼。具...
刚签核协议不到24小时,美国突... 美国东部时间7月22日下午,美国宣布与沙特阿拉伯签署了一项民用核能协议。据美国有线电视新闻网(CNN...
中国信通院牵头,数据编织国际标... IT之家 7 月 24 日消息,中国信通院今日发文称,国际电信联盟第 21 研究组(ITU-T SG...
国内首颗商业空间碎片监测卫星发... 【国内首颗商业空间碎片监测卫星发射成功】《科创板日报》24日讯,7月24日上午,中科宇航力箭一号运载...
邓煜,诗人,数学家,老二次元 来源 视觉中国菲尔兹奖的通知邮件抵达时,普林斯顿大学数学博士、芝加哥大学数学系教授邓煜正在看一本恋爱...
安全生产许可证状态不是“有效”... 工程公司的安全生产许可证在官方系统显示为“其他”状态,有一栏则显示“整改”,却成为高标准农田项目的第...