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

Qt开发的应用记录读取用户习惯设置的方法的更多相关文章

  1. 【Linux开发】【Qt开发】配置tslibs触摸屏库环境设置调试对应的设备挂载点

    [Linux开发][Qt开发]配置tslibs触摸屏库环境设置调试对应的设备挂载点 标签(空格分隔): [Linux开发] [Qt开发] 比如: cat /dev/input/mice cat /de ...

  2. ESP8266 ESP-01制作B站粉丝计数器 | Arduino IDE开发ESP8266 | ESP8266存储读取用户数据

    1.实物图 2.原理图 3.Arduino程序 在程序中修改自己的B站UID和自己家的WiFi名称及密码即可. /*B站粉丝计数器*/ /******************************* ...

  3. 网站开发技巧, 使用byte[]持久化用户个性设置

    场景, 网站用户的个性化配置较多, 而且容易发生增加和改变, 如何在数据库保存是个问题. 为了避免数据库表字段经常变更, 我们设计在表增加一个varbinary(max)字段存储个性化配置. 个性化的 ...

  4. [QT开发小结]LNK1104: cannot open file ‘gdi32.lib’ 解决方法

    1.环境变量 : Path = ;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin; 添加变量: INCLUDE = C:\Program ...

  5. 作业一:android开发平台的演变以及Android Studio设置

    目录:     ①. 从Eclipse到Android Studio   ②. Android Studio的下载和安装   ③. 用户习惯设置以及快捷键   ④. SDK路径重新设置 ↓点此跳转到文 ...

  6. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息

    项目的Github地址:https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了 ...

  7. iOS开发--应用设置及用户默认设置【2、读取应用中的设置】

            在上一节中,我们通过探讨应用的系统设置的基本功能,了解运用bundle捆绑包以及plist文件的基本开发.用户能够使用设置应用来声明他们的偏好设置,那么我们怎样去调用用户所设置的参数呢 ...

  8. 基于arm的嵌入式QT开发(课程设计)

    一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...

  9. iOS开发--应用设置及用户默认设置【1、bundle的运用】

           在iphone里面,应用都会在“设置”里面有个专属的应用设置,选择该菜单界面,用户便可以在其中输入和更改各种选项,协助用户更便捷设置个人喜好与习惯. 在这一节中,希望能通过对捆绑包(bu ...

随机推荐

  1. LeetCode初级算法之数组:136 只出现一次的元素

    只出现一次的元素 题目地址:https://leetcode-cn.com/problems/single-number/ 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找 ...

  2. Luogu-P3205-HNOI2010-合唱队

    题目地址 思路 这道题其实是P3146 [USACO16OPEN]248的升级版,但是N的范围很大,为262144.原先的O(N3)的方法自然会TLE,甚至O(N2)的方法也不足以解决. 定义f[i] ...

  3. CF873D Merge Sort

    其实最优的方法其他的题解已经讲得很好了,本题解仅用于记录和分享一个新的思路. 这道题是让你输出符合条件的序列,而序列的每个数之间具有一定的逻辑关系,很容易想到拓扑排序,于是此题就变为,如何找出满足条件 ...

  4. Power BI八年回望记

    本人从事BI,数据仓库领域相关工作15个年头,这15年目睹了这个方向从火爆到逐渐被大数据领域不断吞食.中间零散关注Power BI好长时间,也算目睹了它的成长. 那天在网络上搜索power bi,无意 ...

  5. 5+App 相关记录

    一.页面跳转到app 1.应用的manifest.json文件,plus --> distribute --> google 节点下,增加属性 schemes 2.打包后,在手机里安装. ...

  6. Angular:使用前端proxy代理解决跨域问题

    ①在项目文件的根目录下新建文件proxy.config.json { "/": { "target": "http://127.0.0.1:3000& ...

  7. 宝塔linux面板防护CC设置

    使用宝塔linux面板很多用户受到CC攻击不知如何防范. 下面讲下如何利用宝塔自带的功能来进行基本的CC防护. 首先是在nginx上有个waf安全模块,里面有CC防护设置.(要求nginx为1.12版 ...

  8. K8s 终将废弃 docker,TKE 早已支持 containerd

    近日 K8s 官方称最早将在 1.23版本弃用 docker 作为容器运行时,并在博客中强调可以使用如 containerd 等 CRI 运行时来代替 docker.本文会做详细解读,并介绍 dock ...

  9. JavaSE24-类加载器&反射&模块化

    1.类加载器 1.1 类加载 类加载的描述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化.如果不出现意外情况,JVM将会连续完 ...

  10. The Linux Scheduler: a Decade of Wasted Cores

    The Linux Scheduler: a Decade of Wasted Cores 这是一篇介绍Linux调度问题的文章,源自这篇文章.文章中涉及到的一些问题可能已经得到解决,但可以学习一下本 ...