qt QSettings 用法总结

用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现。

我们知道,这些settings一般都是存在系统里的,比如windows一般都写在系统注册表或者写INI文件,mac系统一般都在XML文件里,那么按照一般的标准来说,许多应用程序是用INI文件来实现的。而Qsettings就是提供了一种方便的方法来存储和恢复应用程序的settings。

QSettings的API是基于Qvariant,Qvariant是一种数据类型的集合,它包含了大部分通常的Qt数据类型,比如QString,QRec,QImage,等等。

当我们创建一个Qsettings的对象时,我们需要传递给它两个参数,第一个是你公司或者组织的名称,第二个事你的应用程序的名称。比如:

Settings = Qsettings(“MySoft”,”QtPad”)

公司名称:MySoft,程序名称:QtPad

假如我们在应用程序中多次要用到Qsettings,为了简单其间,我们可以在主程序中先如下声明。

QtCore.QCoreApplication.setOrganizationName("MySoft")

QtCore.QCoreApplication.setOrganizationDomain("mysoft.com")

QtCore.QCoreApplication.setApplicationName("QtPad")

当然前提是已经from PyQt4 import QtCore

然后在应用程序的任何地方想要声明一个Qsettings类型的变量,便不需要书写两个参数了,直接用settings = Qsettings即可。

那么如何用它来保持应用程序的settings信息呢?我们以字典数据类型与之类比,它也有key,以及对应的value。比如下面例子:

settings = Qsettings(“MySoft”,”QtPad”)

Mainwindow = QmainWindow()
    settings.setValue(“pos”,QVariant(Mainwindow.pos())

settings.setValue(“size”,QVariant(Mainwindow.size())

上面两句就是把当前窗口的位置,和大小两个信息记录到了settings中,其中的key就是”pos”和”size”两个Qstring类型,而它所对应的值就是QVariant类型的。当然如果我们要写的key已在settings中存在的话,则会覆盖原来的值,写入新值。

如何读取Qsettings里的内容呢?如下:

Pos = settngs.value(“pos”).toPoint()

Size = settings.value(“size”).toSize()

当然如果key所对应的value是int型的,也可toInt(),如果没有我们要找的key,则会返回一个null QVariant如果用toInt的话会得到0。

那么实际应用中我们一般会如下:

pos= settings.value("pos", QVariant(QPoint(200, 200))).toPoint()

size= settings.value("size", QVariant(QSize(400, 400))).toSize()

self.resize(size)

self.move(pos)

意思是,如果settings里有以前存下的(用setValue设置的)pos和size的值,则读取,如果没有,不会返回null,而会使用我们给它的起始值——default value——即应用程序第一次运行时的情况。

注意:因为QVariant是不会提供所有数据类型的转化的,比如有toInt(),toPoint(),toSize(),但是却没有对Qcolor,Qimage和Qpixmap等数据类型的转化,此时我们可以用QVariant.value(),具体参看QVariant模块说明。

下面看看如何在应用程序中使用:

import sys

from PyQt4.QtCore import *

from PyQt4.QtGui import *

class MainWindow(QMainWindow):

def __init__(self):

QMainWindow.__init__(self)

...

self.readSettings()

...

def readSettings(self):

settings = Qsettings(“MySoft”,”QtPad”)

pos=settings.value("pos",QVariant(QPoint(200,200))).toPoint()

size=settings.value("size",QVariant(QSize(400,400))).toSize()

self.resize(size)

self.move(pos)

def writeSettings(self):

settings = Qsettings(“MySoft”,”QtPad”)

settings.setValue("pos", QVariant(self.pos()))

settings.setValue("size", QVariant(self.size()))

def closeEvent(self,event):

if self.maybeSave():

self.writeSettings()

event.accept()

else:

event.ignore()

上面是一般应用程序的应用方法。

下面再看一些Qsettings里常用的metho:

Qsettings.annKeys(self)返回所有的key,以list的形式

Qsettings.applicationName(self)返回应用程序名称

Qsettings.clear(self) 清楚此settings里的内容

Bool Qsettings.contains(self,key)返回真,如果存在名为key的key

Qsettings.remove(self, keyname)清楚key及其所对应的value

Qsetting.fileName() 返回写入注册表地址,或者INI文件路径

等等,请参看帮助文档。

我们可以探索一下,这些settings在应用程序关闭以后到底存到了什么地方呢?

我们可以在上面的程序中的writeSettings中,后面加一句话:

Print Settings.fileName()

这个在windows下,默认Qsettings会打印出这个程序的系统注册表所在地:

这个结果是:HKEY_CURRENT_USERSoftwareMySoftQtPad

如下图:

由此我们可以看出,这个writesettings其实就是个写注册表的过程。

当然,我们也可以不写注册表,我们写ini文件:

settings = QSettings("./QtPad.ini", QSettings.IniFormat)

settings.setValue("pos", QVariant(self.pos()))

settings.setValue("size", QVariant(self.size()))

就会在当前文件夹下产生一个QtPad.ini文件,打开后文件内容为:

[General]

pos=@Point(200 200)

size=@Size(400 400)

更多关于Qsettings内容请参考帮助文档。

qt QSettings相关推荐

  1. QT QSettings读写ini文件简单dome

    QT QSettings读写ini文件 实现文件一键配置软件上的所有控件 1 ui设计Dome 两个按钮 (保存 导入) 两个spinbox(宽 高) 2 点击生成ini文件 或者点击导入ini文件 ...

  2. QT QSettings介绍

    简介 QSettings类提供了持久的跨平台应用程序设置. 用户通常期望应用程序记住它的设置(窗口大小.位置等)所有会话.这些信息通常存储在Windows系统注册表,OS X和iOS的属性列表文件中. ...

  3. Qt - QSettings实现用户偏好保存

    短小的目录 前言 QSettings 创建 存储格式 保存&读取 存储位置 跨平台注意事项 自定义存储格式 Demo 前言 之前在 Android 开发的时候,也有用到用户偏好保存,当时用的是 ...

  4. QSettings 读写ini文件

    使用QT读写ini配置文件 目前只用到了最基本方法,如下 写配置文件 (注意:可能并不是执行完setValue就写到文件中去了) QSettings settings("SetInfor.i ...

  5. QT中使用QSettings保存应用程序配置信息

    一.问题描述 今天遇到一个问题,就是想实现一个软件,我上一次开启软件时候配置的IP地址以及,打开的文件路径,能够在我下一次打开软件时候自动写入上一次配置的信息,不需要再重新设置配置了. 二.解决方法 ...

  6. Qt随笔 - QSettings

    QSettings类提供了持久的跨平台应用程序设置. 嗯,一句话概括QSettings-- 创建 来看一下原型: QSettings::QSettings(const QString &org ...

  7. qt保存文件的默认路径_Qt Quick QSettings 配置信息保存位置

    Qt Quick 给我们提供了非常方便的配置文件管理功能,它不仅仅可以在 C++ 中访问,也可以在 QML 中直接访问,最近在看 Qt Examples 目录下的 gallery 项目示例时,虽然知道 ...

  8. 【Qt】QSettings介绍【转】

    简介 QSettings类提供了持久的跨平台应用程序设置. 用户通常期望应用程序记住它的设置(窗口大小.位置等)所有会话.这些信息通常存储在Windows系统注册表,OS X和iOS的属性列表文件中. ...

  9. qsettings删除注册表_【Qt】QSettings读写注册表、配置文件【转】

    简述 一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库sqlite,也可以操作注册表.读写配置文件. 关于QSettings的使用前面已经介绍过了,比较详细,见" ...

最新文章

  1. ikbc键盘自动打字_键盘按斤卖,一斤一百块?IKBC W200机械键盘简晒
  2. linux发邮件安装什么意思,linux – 如何找出安装/发送电子邮件的邮件程序?
  3. 多种脚本语言生成九九乘法口诀表
  4. 关于301跳转的多种办法
  5. 决策树:特征分布空间划分方法
  6. 20220202--CTF刷题MISC方向--第7题--编码
  7. html+字体图标找不到字体,bootstrap中不显示字体图标问题怎么解决?
  8. oracle 提示存在lob,Oracle数据库出现ORA-19566 LOB坏块的处理记录
  9. 《Using Docker》书评和与作者Adrian Mouat的问答
  10. 计算机硬件英语单词有哪些,计算机硬件英语词汇
  11. iOS开发之仿照LinkedIn登录界面效果
  12. win10背景显示计算机名,如何自定义Win10计算机的开始菜单背景和图片
  13. 【SSH网上商城项目实战26】完成订单支付后的短信发送功能
  14. 计算机格式化后,电脑格式化后需要重装系统吗_格式化电脑重装系统的方法步骤...
  15. shell命令查阅端口信息_Powershell 执行外部命令
  16. Visio画坐标系步骤
  17. $timeout、$interval和$watch用法
  18. 使用Windows PE部署Windows镜像
  19. Vue CLI构建SPA项目教你手把手创建SPA项目
  20. 大吉大利,今晚吃鸡——跑毒篇

热门文章

  1. CTFHUB-WEB--cooki注入wp
  2. 用手机打开word图表位置很乱_超过80%的人学会了都说好用,这是一篇良心干货文...
  3. Python-Hello world+使用编辑器使用技巧
  4. python logistic回归 pvalue_查看sklearn的线性回归系数的p value
  5. Ubuntu 16.04系统中编译安装FFmpeg 4.2.1(Android NDK r20)
  6. FreeNAS-11.2-U7 smb共享和FTP设置
  7. Vector3基础和Transform位置
  8. 校验军官证、护照、港澳通行证的正则表达式
  9. 函数递归(python)——猴子吃桃
  10. 无线路由dhcp服务器设置,路由器DHCP功能设置教程