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. 前端webSocket和后台php

    HTTP协议的特性:属于"请求-响应"模型,只有客户端发起了请求消息,服务器才能给出响应消息,没有请求,就没有响应:一个请求消息,服务器只能返回一个响应消息.有些特殊应用场景中,如 ...

  2. REHの个人主页

    朝暮与年岁并往 然后与你一同行至天光. 简介 这是怎么做到的啊-- 把那些迷茫的浑浊的不可预知的,裁剪,变化,像个造物主一样,最终成为混沌而又分明的,除去一身的戾气和险恶,把那些复杂和晦涩都剖析成它精 ...

  3. spring入门学习

    开发步骤: 1.导入Spring开发的基本坐标 2.编写接口和实现类 3.创建Spring核心配置文件 4.在Spring核心配置文件中配置实现类 5.使用Spring的API获得Bean实例Bean ...

  4. 跨站点请求伪造 - SpringBoot配置CSRF过滤器

    1. 跨站点请求伪造   风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务.   原因:应用程序使用的认证方法不充分. ...

  5. Spring @Scheduled Annotation

    1.Overview 这里我们将会学习Spring @Scheduled 标签,了解它是如何配置,如何设置定时任务. 关于它的使用,有两点简单的规则需要记住: ※它的方法应该是一个void返回值类型 ...

  6. 【震惊】padding-top的百分比值参考对象竟是父级元素的宽度

    引言 书写页面样式与布局是前端工程师Coding 中必不可少的一项工作,在定义页面元素的样式时,padding 属性也是经常被使用到的. padding 属性用于设置元素的内边距,其值可以是lengt ...

  7. disable_functions Bypass

    参考文章和poc(文中均有poc下载地址) : https://www.uedbox.com/post/59295/ https://www.uedbox.com/post/59402/ 当然 fre ...

  8. kepler.gl 2.4.0重要更新

    1 简介 kepler.gl作为开源地理空间数据可视化神器,也一直处于活跃的迭代开发状态下.而在前不久,kepler.gl正式发布了其2.4.0版本,下面我们就来对其重要的新特性进行介绍: 图1 2 ...

  9. 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署

    庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介      我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...

  10. iOS 集成友盟分享图片链接为http时无法加载问题解决

    一.问题描述 UMShareWebpageObject *obj = [UMShareWebpageObject shareObjectWithTitle:title descr:shareText ...