zoukankan      html  css  js  c++  java
  • 程序启动读取和关闭时保存应用程序设置(QSettings)

    保存应用程序设置(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());
    }

    /* 这里选择 4 个状态进行保存

  • 相关阅读:
    HTML5新增标签,表单及属性
    css3背景属性
    移动端隐藏滚动条
    css3选择符
    Hibernate读书笔记条件查询
    Hibernate读书笔记事件机制
    Hibernate读书笔记SQL查询
    Hibernate读书笔记HQL查询
    Hibernate读书笔记Hibernate知识总结
    Hibernate读书笔记缓存
  • 原文地址:https://www.cnblogs.com/cy568searchx/p/3653390.html
Copyright © 2011-2022 走看看