zoukankan      html  css  js  c++  java
  • Qt开发的应用记录读取用户习惯设置的方法

    Qt开发的应用记录读取用户习惯设置的方法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/wokaowokaowokao12345/article/details/78409385

    本文转载自以上博客,侵删

    在软件的使用过程中,有些用户有特定的习惯,如:窗口大小、参数设置、文件打开的方式等。当下次启动软件时候,用户往往希望设置和上次的一样,因此我们需要有一个文件来保存用户的一些偏好信息,在程序重新启动的时候再进行偏好设置。当然我们可以自己记录并保存用户的习惯,下次启动应用的时候读取就好。

    但是,Qt给开发者提供了QSetting类。允许开发者创建一个配置文件或者操作注册表,还可以指定配置文件的位置和下次读取,恢复用户的上次设置。

    QSetting类

    QSetting是一个平台无关的可以设置和读取应用程序设置的类。由于笔者是在windows环境下做软件开发,所以这个博客中的例子以windows平台进行测试。

    初始化

    使用之前先导入库

    #include <QSettings>
    

    在创建QSetting对象时,应该把公司或组织,还有应用程序的名字传递给构造函数,例如,如果应用程序叫做Star Runner,公司叫做MySoft,那么应该像下面这样构造对象

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

    键(key)和值(value)

    QSetting由键和值组成,使用QString指定键(key)的名字,使用QVariant来存储和键相关联的值。使用setValue(),设定值。例如:

    settings.setValue(“editor/warpMargin”,68);
    

    如果已经存在了同名的键,那么新的值会覆盖原来的值,使用value()函数获取setting的值。例如:

    int margin=settings.value(“editor/warpMargin”).toInt();
    

    如果没有指定的key,那么value()会返回一个Null QVariant,也可以为value()指定一个缺省的值,例如:

    int margin=settings.value(“editor/warpMargin,80).toInt();
    

    缺省值就是80,value() 返回的值是一个QVariant,把他转换成int类型。

    QSetting 分隔符

    使用“/”作为分隔符,而不是“”。例如:

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

    应用程序状态的保存与读取

    在关闭应用程序时候保存应用程序窗口的大小和位置,在再次打开应用程序时候,读取出来。

    保存:

    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();
     }
    

    在构造函数中调用readSetting(),在关闭窗口事件中调用writeSettings()

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

    清空所有记录

    settings.clear();
    

    建议

    在保存默认设置的时候,建议添加默认值,如果未添加软件在第一次运行时,参数等设置全部混乱!
    默认参数设置如下。

    ui.radioButtonC1->setChecked(settings.value("radioButtonC1", false).toBool());
    ui.lineEditZDName->setText(settings.value("lineEditZDName", "ZD").toString());
    ui.checkBoxZD->setChecked(settings.value("checkBoxZD", true).toBool());
    ui.timeEditStart->setTime(settings.value("timeEditStart", QTime(8, 35, 06)).toTime());
    ui.spinBoxTimeLable->setValue(settings.value("spinBoxTimeLable", 1).toInt());
    

    参考
    http://blog.chinaunix.net/uid-11765716-id-3181163.html
    http://blog.csdn.net/u011512437/article/details/43927321

  • 相关阅读:
    PCI总线原理(二)
    smbus协议
    PCI总线原理(一)
    计算机术语中关于 Assert 和Deassert 词汇意思
    用安全存储器实现FPGA的身份识别及防拷贝
    主板结构
    qt 雅黑字体
    PCIExpress总线简介
    PHY管理接口(MDIO)
    PCI总线原理(三)
  • 原文地址:https://www.cnblogs.com/nbtech/p/14223186.html
Copyright © 2011-2022 走看看