当前位置:网站首页>Qt 中 QVariant 使用总结
Qt 中 QVariant 使用总结
2022-06-23 05:17:00 【litanyuan】
背景
QVariant 可以存储各种数据类型,包括 Qt 中所有内置类型、C++ 中所有基本数据类型,以及自定义类型。
构造函数
QVariant variant_bool(false);
QVariant variant_string(QString("hello"));
QVariant variant_double(3.14);
//...自定义类型支持直接构造
关键成员函数
①.type:获取当前保存的数据类型
QVariant variant;
qDebug() << variant.type();
variant.setValue(3.14);
qDebug() << variant.type();

②.value:获取保存到指定类型的值
QVariant variant(QString("hello"));
qDebug() << variant.value<QString>();
③.canConvert:判断能否将存储的类型转换为指定类型
QVariant variant(3.14);
qDebug() << variant.type();
qDebug() << variant.canConvert<QString>();

④.convert:将存储到类型转换为指定类型
QVariant variant(QString("hello"));
qDebug() << variant.type();
qDebug() << variant.convert(QVariant::Int);
qDebug() << variant;

⑤.isValid:判断是否存储有一个有效值
QVariant variant;
qDebug() << variant.isValid();
variant = QString("hello");
qDebug() << variant.isValid();

基本数据类型读取
①.数据保存
QVariant variant_int(12);
QVariant variant_string = QString("hello");
QVariant variant_bool;
variant_bool.setValue(false);
②.数据读取
QVariant variant_int(12);
QVariant variant_string = QString("hello");
QVariant variant_bool;
variant_bool.setValue(false);
qDebug() << variant_int.toInt();
qDebug() << variant_string.toString();
qDebug() << variant_bool.value<bool>();

自定义数据类型读取
①.注册为元类型
struct MyStruct
{
int id;
QString name;
};
Q_DECLARE_METATYPE(MyStruct)
QVariant variant;
{
MyStruct ms;
ms.id = 1;
ms.name = "hello";
variant.setValue<MyStruct>(ms);
}
MyStruct ms = variant.value<MyStruct>();
qDebug() << ms.id << ms.name;

②.自定义类型转换
struct MyStruct
{
int id;
QString name;
MyStruct() = default;
MyStruct(const QVariant & variant)
{
*this = variant.value<MyStruct>();
}
operator QVariant() const
{
return QVariant::fromValue(*this);
}
};
Q_DECLARE_METATYPE(MyStruct)
QVariant variant;
{
MyStruct ms;
ms.id = 1;
ms.name = "hello";
variant = ms;
}
MyStruct ms = variant;
qDebug() << ms.id << ms.name;

指针类型存取
MyStruct * ms = new MyStruct;
ms->id = 1;
ms->name = "hello";
QVariant variant = QVariant::fromValue(static_cast<void*>(ms));
MyStruct * myStruct = static_cast<MyStruct*>(variant.value<void*>());
qDebug() << myStruct->id << myStruct->name;

QVariantMap
①.概述
在 QVariantMap 头文件中有如下定义:typedef QMap<QString,QVariant> QVariantMap,即 QVariantMap 是一个类型别名。
②.代码示例
QVariantMap config;
config["id"] = 10;
config["name"] = QString("hello");
qDebug() << config["id"].toInt();
qDebug() << config["name"].toString();

边栏推荐
- Paper notes: multi label learning lsml
- There are so many code comments! I laughed
- Summary of business logic security ideas
- C# wpf 通过绑定实现控件动态加载
- Link of Baidu URL Parameters? Recherche sur le chiffrement et le décryptage des paramètres d'URL (exemple de Code)
- Leetcode topic resolution remove nth node from end of list
- Day_ 07 smart communication health project FreeMarker
- Microsoft interview question: creases in origami printing
- mongodb 4. X binding multiple IP startup errors
- Day_ 11 smart communication health project - graphic report and poi Report
猜你喜欢

qt creater搭建osgearth环境(osgQT MSVC2017)

把CSMA/CD、Token Bus、Token Ring说清楚
百度URL參數之LINK?URL參數加密解密研究(代碼實例)

Day_06 传智健康项目-移动端开发-体检预约

Day_03 传智健康项目-预约管理-检查组管理

Day_12 传智健康项目-JasperReports

Day_ 12 smart health project jasperreports

Day_04 传智健康项目-预约管理-套餐管理

了解学习 JSX 的工作方式

【Leetcode】431. Encode n-ary tree to binary tree (difficult)
随机推荐
Day_ 03 smart communication health project - appointment management - inspection team management
Day_01 传智健康项目-项目概述和环境搭建
Steam教育对国内大学生的影响力
Day_ 11 smart communication health project - graphic report and poi Report
Golang regular regexp package use -04- use regular replacement (replaceall(), replaceallliteral(), replaceallfunc())
什么是PDCA循环?如何整合 PDCA 循环和 OKR
C语言 获取秒、毫秒、微妙、纳秒时间戳
Summary of business logic security ideas
云盒子联合深信服,为南京一中打造智慧双模教学资源分享平台
Difference between MySQL read committed and repeatability
ffplay实现自定义输入流播放
Leetcode topic resolution single number
业务逻辑安全思路总结
Remove duplicates from sorted list II of leetcode topic resolution
30 data visualization tips that can not be ignored
百度URL参数之LINK?URL参数加密解密研究(代码实例)
Day_12 传智健康项目-JasperReports
haas506 2.0开发教程-高级组件库-modem.net(仅支持2.2以上版本)
vs+qt项目转qt creator
快速认识 WebAssembly