PyQt学习笔记(10)--QSetting

用户对应用程序经常有这样的要求:要求它能记住它的 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,为了简单其间,我们可以在主程序中先如下声明。

 
  1. QtCore.QCoreApplication.setOrganizationName("MySoft")

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

  3. QtCore.QCoreApplication.setApplicationName("QtPad")

   当然前提是已经  from  PyQt4  import  QtCore

扫描二维码关注公众号,回复: 3430752 查看本文章

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

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

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

  2. Mainwindow = QmainWindow()

  3. settings.setValue(“pos”,QVariant(Mainwindow.pos())

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

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

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

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

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

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

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

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

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

 
  1. import sys

  2. from PyQt4.QtCore import *

  3. from PyQt4.QtGui import *

  4.  
  5. class MainWindow(QMainWindow):

  6. def __init__(self):

  7. QMainWindow.__init__(self)

  8. self.readSettings()

  9.  
  10. def readSettings(self):

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

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

  13. oint()

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

  15. Size()

  16. self.resize(size)

  17. self.move(pos)

  18.  
  19. def writeSettings(self):

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

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

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

  23. def closeEvent(self,event):

  24. if self.maybeSave():

  25. self.writeSettings()

  26. event.accept()

  27. else:

  28. event.ignore()

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

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文件路径

等等,请参看帮助文档 。

--------------------- 本文来自 loster_Li 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/loster_li/article/details/52841607?utm_source=copy

猜你喜欢

转载自blog.csdn.net/IAlexanderI/article/details/82941436