当前位置:网站首页>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();

边栏推荐
- 业务逻辑安全思路总结
- MySQL5.6 (5.7-8) 基于shardingsphere5.1.1 Sharding-Proxy模式读写分离
- Difference between MySQL read committed and repeatability
- [resolved] "the unity environment took too long to respond. make sure that: \n“
- C language stepping on the pit: document coding error, resulting in Base64 Chinese coding error
- 百度URL参数之LINK?URL参数加密解密研究(代码实例)
- 图解 Google V8 # 18 :异步编程(一):V8是如何实现微任务的?
- Synchronous switching power supply reduces EMI layout dv/dt di/dt
- Illustration Google V8 18: asynchronous programming (I): how does V8 implement micro tasks?
- Day_ 05 smart communication health project - appointment management - appointment settings
猜你喜欢

Day_02 传智健康项目-预约管理-检查项管理
Link of Baidu URL parameter? Research on URL parameter encryption and decryption (code example)

Functions and basic structure of CPU

Softing dataFEED OPC Suite将西门子PLC数据存储到Oracle数据库中

Vs+qt project transferred to QT Creator
![[vivado] xilinxcedstore introduction](/img/c7/4f203d125ddb18378398a7eaeffaf5.png)
[vivado] xilinxcedstore introduction

CPU的功能和基本结构

Illustration Google V8 18: asynchronous programming (I): how does V8 implement micro tasks?

从 WAN 到 SD-WAN 边缘设备的网络架构

Day_ 07 smart communication health project FreeMarker
随机推荐
了解学习 JSX 的工作方式
Day_ 12 smart health project jasperreports
【已解决】“The Unity environment took too long to respond. Make sure that :\n“
记一次GLIB2.14升级GLIB2.18的记录以及其中的步骤原理
Remove the influence of firewall and virtual machine on live555 startup IP address
Skilled use of slicing operations
There are so many code comments! I laughed
图解 Google V8 # 18 :异步编程(一):V8是如何实现微任务的?
Machine learning artifact scikit learn minimalist tutorial
Day_04 傳智健康項目-預約管理-套餐管理
Programmers' real ideas | daily anecdotes
Day_ 08 smart health project - mobile terminal development - physical examination appointment
Xray linkage crawlergo automatic scanning pit climbing record
haas506 2.0开发教程-高级组件库-modem.voiceCall(仅支持2.2以上版本)
Day_ 11 smart communication health project - graphic report and poi Report
Day_ 02 smart communication health project - appointment management - inspection item management
解析创客教育中的造物原理
如何查看本机IP
The softing datafeed OPC suite stores Siemens PLC data in an Oracle Database
Day_06 传智健康项目-移动端开发-体检预约