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
Qt开发的应用记录读取用户习惯设置的方法的更多相关文章
- 【Linux开发】【Qt开发】配置tslibs触摸屏库环境设置调试对应的设备挂载点
[Linux开发][Qt开发]配置tslibs触摸屏库环境设置调试对应的设备挂载点 标签(空格分隔): [Linux开发] [Qt开发] 比如: cat /dev/input/mice cat /de ...
- ESP8266 ESP-01制作B站粉丝计数器 | Arduino IDE开发ESP8266 | ESP8266存储读取用户数据
1.实物图 2.原理图 3.Arduino程序 在程序中修改自己的B站UID和自己家的WiFi名称及密码即可. /*B站粉丝计数器*/ /******************************* ...
- 网站开发技巧, 使用byte[]持久化用户个性设置
场景, 网站用户的个性化配置较多, 而且容易发生增加和改变, 如何在数据库保存是个问题. 为了避免数据库表字段经常变更, 我们设计在表增加一个varbinary(max)字段存储个性化配置. 个性化的 ...
- [QT开发小结]LNK1104: cannot open file ‘gdi32.lib’ 解决方法
1.环境变量 : Path = ;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin; 添加变量: INCLUDE = C:\Program ...
- 作业一:android开发平台的演变以及Android Studio设置
目录: ①. 从Eclipse到Android Studio ②. Android Studio的下载和安装 ③. 用户习惯设置以及快捷键 ④. SDK路径重新设置 ↓点此跳转到文 ...
- 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息
项目的Github地址:https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了 ...
- iOS开发--应用设置及用户默认设置【2、读取应用中的设置】
在上一节中,我们通过探讨应用的系统设置的基本功能,了解运用bundle捆绑包以及plist文件的基本开发.用户能够使用设置应用来声明他们的偏好设置,那么我们怎样去调用用户所设置的参数呢 ...
- 基于arm的嵌入式QT开发(课程设计)
一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...
- iOS开发--应用设置及用户默认设置【1、bundle的运用】
在iphone里面,应用都会在“设置”里面有个专属的应用设置,选择该菜单界面,用户便可以在其中输入和更改各种选项,协助用户更便捷设置个人喜好与习惯. 在这一节中,希望能通过对捆绑包(bu ...
随机推荐
- AcWing 311 .月之谜
大型补档补了一年 题目链接 考虑枚举月之数的数列和,然后展开dp预处理 设当前模数为 \(P\) \(f[i][j][k]\) 表示一共有 i 位数字,数位和为 j,数值和 % P 的值为 K \(f ...
- sort by背后使用了什么排序算法
用到了快速排序,但不仅仅只用了快速排序,还结合了插入排序和堆排序 搬运自https://blog.csdn.net/qq_35440678/article/details/80147601
- jmeter接口测试笔记
1.接口测试基础 API:Application Programming Interface,即调用应用程序的通道. 接口测试遵循点 接口的功能性实现:检查接口返回的数据与预期结果的一致性. 测试接口 ...
- [日常摸鱼]luogu1613跑路
新年A的第一道题2333 https://www.luogu.org/problemnew/show/P1613 题意:给一张有向图,每条边长为1,每个单位时间只能走$2^k$的长度,$k$可以任意选 ...
- 5分钟完全掌握Python协程
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 1. 协程相关的概念 1.1 进程和线程 进程(Process)是应用程序启动的实例,拥有代码.数据 ...
- java基础:数组详解以及应用,评委打分案例实现,数组和随机数综合,附练习案列
1.数组 1.1 数组介绍 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致. 1.2 数组的定义格式 1.2.1 第一种格式 数据类型[] 数组名 示例: int[] arr; ...
- Hive动态分区详解
目录 动态分区调整 注意 动态分区插入 动静分区结合 例子 动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false)hive.exec.dynamic.partition=t ...
- 【命令】gunzip命令
gunzip命令是拿来解以.gz格式的压缩包,其语法和参数选项和gzip一样,我们可以使用gzip来实现,请查看:gzip命令使用方法
- (七)、touch--创建文件或者更新时间戳
一.命令说明与格式 创建文件并更新时间戳,若要创建的文件名已经存在,则仅仅更新时间戳,而不改变其他任何信息 格式:touch [选项] 目录名/文件名 选项: -a ...
- 深入浅出JVM(一):你写得.java文件是如何被加载到内存中执行的
众所周知,.java文件需要经过编译生成.class文件才能被JVM执行. 其中,JVM是如何加载.class文件,又做了些什么呢? .class文件通过 加载->验证->准备->解 ...