文档章节

利用Qt的QSetting类存储自定义数据类型所需准备

天朝搬砖工
 天朝搬砖工
发布于 2013/11/10 17:16
字数 365
阅读 51
收藏 0

    很多时候,我们都需要自定义自己的数据类型,并将之存入一些特定的文件里,作为一种存储的形式。

    在Qt里,一般会用到QSetting这个类,通过它可以将我们的数据已k/v的形式存入一个.ini文件。不过,在能够被其顺利存入之前,需要注意一个细节,就是方法QSetting::setvalue(QString,QVariant)。在这里,要想能够顺利执行这个方法的话,你需要做3件事:

第一件,就是在你的自定义数据类型下面进行如下声明Q_DECLARE_METATYPE(MyData),使之能够存入QVrariant类型变量中;

第二件,就是给自定义的数据重载输入流与输出流的运算符,可以放自定义数据下面以内联函数的形式定义下来

inline QDataStream &operator <<(QDataStream & out,const MyData &u){...}

inline QDataStream &operator >>(QDataStream & in,MyData &u){...},重载的目的是为了是我们自定义的数据能够被操作符识别,便于将其以特定形式存入到外部文件中

第三件事情,记住在main函数体里,提前调用到如下两个函数来注册自定义数据类型
qRegisterMetaType<MyData>("MyData");

qRegisterMetaTypeStreamOperators<MyData>("MyData");

这样一来,我们的数据就可以被Qt的元对象系统识别,就不会出现“Invalid type to save”的提示了。

© 著作权归作者所有

共有 人打赏支持
天朝搬砖工
粉丝 4
博文 15
码字总数 12200
作品 0
东城
其他
私信 提问
QSetting的用法

QSetting是一个平台无关的可以设置和读取应用程序设置的类 用户可能希望应用程序记住自己应用程序的设置,windows记录在注册表中,mac中记录在xml中,在unix中,缺乏标准,所以很多都记录在....

晨曦之光
2012/04/13
1K
0
QT容器类

Sequentail Containers QVector array-like data structure(在尾部插入数据时效率很高,而在中间和头部插入数据时开销很大)。 QVector提供了[]运算符 QVector可以用< QLinkedList不提供[]运算...

晨曦之光
2012/04/13
3.3K
0
【Qt笔记】自定义拖放数据

上一章中,我们的例子使用系统提供的拖放对象进行拖放数据的存储。比如使用创建文本,使用创建 URL 对象等。但是,如果你希望使用一些自定义的对象作为拖放数据,比如自定义类等等,单纯使用...

大道无名
2016/08/02
15
0
【Qt笔记】自定义只读模型

model/view 模型将数据与视图分割开来,也就是说,我们可以为不同的视图,、和提供一个数据模型,这样我们可以从不同角度来展示数据的方方面面。但是,面对变化万千的需求,Qt 预定义的几个模...

大道无名
2016/08/01
15
0
《Qt 实战一二三》

简介 “我们来自Qt分享&&交流,我们来自QML分享&&交流”,不管你是笑了,还是笑了,反正我们是认真的。我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度...

u011012932
2015/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
4
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
5
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
2
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
昨天
2
0
java8的时间和`Date`的对比

java8的时间和Date的对比 java8提供了新的时间接口。相对Date,Calendar,个人感觉最大的好处是对时间操作的学习成本很低,比Calendar低。 1. LocalDate,LocalTime,LocalDateTime LocalDate 代...

北风刮的不认真了
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部