常见的函数使用(一)
contains()介绍contains()是 Qt 中多个核心容器类如QJsonObject、QMap、QString、QByteArray等提供的成员函数核心作用是检查当前容器中是否包含指定的 “目标元素”返回值是布尔类型true 表示包含false 表示不包含读取QJsonObject不存在的键、查找QString不存在的子串等换言之可以用来做查找功能比如if(reacthtext.isEmpty()||Item.content.contains(reacthtext,Qt::CaseInsensitive))判断搜索的文本有没有符合的检查JSON对象中是否包含指定的键keyif(!obj.contains(score))检查字节数组中是否包含指定的字节 / 字节串常用于二进制数据校验bool isPngimgData.contains(\x89PNG);QVariant介绍 万能容器它能存储几乎所有 Qt 内置类型如int、QString、QByteArray、QImage和开发者自定义的类对象并且能在需要时安全地还原为原始类型基础操作存储打包→ 查看类型 → 读取拆包直接打包QVariantvar3(QByteArray(binary data));// 存储 QByteArray使用通用方式 使用fromValueQVariant var4QVariant::fromValue(imageData);// 存储 QByteArray读取拆包//valueT()QByteArray bytesvar4.valueQByteArray();结合Qt::UserRole来讲QVariantQVariant varImgQVariant::fromValue(imageData);listItem-setData(varImg,Qt::UserRole);//Qt::UserRole用户自定义类型//读取 QByteArrayUserRole 分区QVariant readVarImgreadItem-data(Qt::UserRole);// 取万能容器QByteArray readImgreadVarImg.valueQByteArray();// 拆包还原//同时也能合并起来QByteArray readImgeadItem-data(Qt::UserRole).valueQByteArray()Qt::UserRole是 “起始值”不是唯一值Qt::UserRole 256是自定义分区的第一个位置如果需要存多个自定义数据用Qt::UserRole 1、Qt::UserRole 2...区分比如一个存图片一个存自定义类不管你存的是QByteArray、ClipboardItem还是int都必须先打包成QVariantfromValue()才能存入UserRole分区QMimeData介绍跨控件 / 跨应用传递数据时会面临两个核心问题数据类型多样文本、图片、文件、自定义数据需要统一的容器封装接收方无法识别数据格式容易解析出错多类型数据共存示例QMimeData*mimeDatanewQMimeData();mimeData-setText(Qt 剪贴板测试文本);mimeData-setHtml(h1Qt 剪贴板测试/h1);QImageimage(test.png);QByteArray imgData;QBufferbuffer(imgData);buffer.open(QIODevice::WriteOnly);image.save(buffer,PNG);mimeData-setData(image/png,imgData);clipboard-setMimeData(mimeData);// 存入剪贴板Qt 自动管理内存//从剪切板读取数据constQMimeData*clipMimeclipboard-mimeData();if(clipMime){// 校验并读取纯文本if(clipMime-hasText()){qDebug()剪贴板文本clipMime-text();}// 校验并读取自定义 MIME 类型的图片if(clipMime-hasFormat(image/png)){QByteArray readImgclipMime-data(image/png);QImage readImage;readImage.loadFromData(readImg);qDebug()图片尺寸readImage.size();}}也能识别自定义类型使用的是hasFormat()// 自定义 MIME 类型application/myapp-clipboardmimeData-setData(application/myapp-clipboard,QVariant::fromValue(item).toByteArray());// 解析自定义 MIME 类型数据constQMimeData*readMime...;if(readMime-hasFormat(application/myapp-clipboard)){QByteArray datareadMime-data(application/myapp-clipboard);QVariant varQVariant::fromByteArray(data);ClipboardItem readItemvar.valueClipboardItem();mimeData的setdata和listItem的setdata名字重名但其实本质不一样比如参入的参数的顺序就能看出来当然高版本的也可能进行了参数的修改这个主要还是得看帮助文档里边写的参数的位置QJsonObject 介绍专门用于处理JSON对象 的核心类与 Qt 其他JSON类QJsonValue、QJsonArray、QJsonDocument配合完成完整的JSON序列化对象→字符串和反序列化字符串→对象键是QString类型值是QJsonValue类型可封装字符串、数字、布尔、数组、嵌套对象等值可以是QJsonArrayJSON数组或另一个QJsonObject嵌套JSON对象#includeQCoreApplication#includeQJsonObject#includeQJsonDocument#includeQDebugintmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);// 步骤1创建 QJsonObject 并添加键值对 QJsonObject userObj;// 方式1insert() 插入键值对支持所有 JSON 基础类型userObj.insert(name,张三);// 字符串值userObj.insert(age,25);// 整数值userObj.insert(isStudent,false);// 布尔值userObj.insert(score,98.5);// 浮点值userObj.insert(hobby,QJsonValue(编程));// 显式封装为 QJsonValue// 方式2[] 运算符直接赋值更简洁userObj[address]北京市;// 嵌套对象值是另一个 QJsonObjectQJsonObject contactObj;contactObj[phone]13800138000;//这里就能自定义json化对象写一个json函数,定义一个QJsonObject 对象然后将传入的参数复制给该对象之后返回该对象即可contactObj[email]zhangsanexample.com;userObj[contact]contactObj;// 嵌套到主对象// 嵌套数组值是 QJsonArrayQJsonArray tagsArray;tagsArray.append(Qt);tagsArray.append(JSON);tagsArray.append(C);userObj[tags]tagsArray;// 步骤2读取 QJsonObject 中的值 // 核心先检查键是否存在contains()再读取避免读取不存在的键if(userObj.contains(name)){QString nameuserObj[name].toString();// 转换为字符串qDebug()姓名name;// 输出张三}if(userObj.contains(age)){intageuserObj.value(age).toInt();// value() 等价于 []qDebug()年龄age;// 输出25}// 读取嵌套对象if(userObj.contains(contact)){QJsonObject contactuserObj[contact].toObject();QString phonecontact[phone].toString();qDebug()电话phone;// 输出13800138000}// 读取嵌套数组if(userObj.contains(tags)){QJsonArray tagsuserObj[tags].toArray();for(inti0;itags.size();i){qDebug()标签itags[i].toString();}}// 步骤3修改/删除键值对 userObj[age]26;// 修改已有键的值userObj.remove(hobby);// 删除指定键qDebug()删除 hobby 后是否存在userObj.contains(hobby);// false// 步骤4序列化QJsonObject → JSON 字符串 QJsonDocumentdoc(userObj);// 格式化输出Indented易读Compact紧凑无空格适合传输QString jsonStrdoc.toJson(QJsonDocument::Indented);qDebug()JSON 字符串\njsonStr;// 步骤5反序列化JSON 字符串 → QJsonObject QByteArray jsonBytesjsonStr.toUtf8();QJsonDocument doc2QJsonDocument::fromJson(jsonBytes);if(doc2.isObject()){// 先判断是否为 JSON 对象而非数组QJsonObject obj2doc2.object();qDebug()反序列化后的年龄obj2[age].toInt();// 输出26}returna.exec();}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418997.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!