Qt_QVariant Qt_QVariantQVariant 是 Qt 框架中一个非常实用的类它类似于 C 的 union但功能更强大可以安全地存储几乎所有常见的 Qt 数据类型和 C 基本类型。为什么需要 QVariantC 原生的 union 不允许包含有非默认构造函数或析构函数的类型因此大多数 Qt 类无法放入 union 中。QVariant 解决了这个问题广泛应用于 QObject::property()、数据库操作、信号槽传参等场景。QVariant支持的类型Variant 默认支持以下类型C 基本类型int、uint、bool、double、float、qlonglong、qulonglongQt 核心类型QString、QByteArray、QChar、QStringList、QDate、QTime、QDateTime、QUrl、QUuid几何类型QPoint、QPointF、QSize、QSizeF、QRect、QRectF、QLine、QLineF容器类型QListQVariant即 QVariantList、QMapQString, QVariant即 QVariantMap、QHashQString, QVariant即 QVariantHashJSON 类型QJsonValue、QJsonObject、QJsonArray、QJsonDocumentGUI 类型需通过valueT() 访问QColor、QFont、QPixmap、QBrush、QPen 等基本用法存储数据// 通过构造函数QVariantv1(123);QVariantv2(hello);QVariantv3(3.14);// 通过 setValue()QVariant v4;v4.setValue(42);// 通过静态方法 fromValue()QVariant v5QVariant::fromValue(100);读取数据QVariantv(123);intiv.toInt();// i 123QString sv.toString();// s 123doubledv.toDouble();// d 123.0boolbv.toBool();// b true// 模板方式通用intvalv.valueint();类型判断与转换QVariantv(42);v.typeName();// 返回 intv.userType();// 返回 QMetaType::Intv.canConvertQString();// 返回 truev.canConvertQColor();// 返回 false// 强制转换v.convert(QMetaType::QString);// 转换后存储 42自定义类型的使用对于自定义类型struct或class需要满足两个条件有默认构造函数和拷贝构造函数使用 Q_DECLARE_METATYPE() 宏注册类型// 头文件中定义并注册structStudent{intid;QString name;intage;};Q_DECLARE_METATYPE(Student)// 使用Student stu;stu.id1;stu.name张三;stu.age18;// 存储QVariant varQVariant::fromValue(stu);// 读取if(var.canConvertStudent()){Student svar.valueStudent();qDebug()s.names.age;}存储指针// 保存QVariant varQVariant::fromValue((void*)somePointer);// 获取SomeType*ptr(SomeType*)var.valuevoid*();处理不支持的基本类型对于 short、char 等 QVariant 没有专用构造函数的类型可以先转为 int 存取// char - QVariantQVariant varB;// 实际存储为 int(66)charc(char)var.toInt();// 取出后转回 char// short - QVariantshorts12;QVariant var2s;// 实际存储为 int(12)shorts2(short)var2.toInt();常用 API 速查方法说明setValue(const T )存储值fromValue(const T )静态方法创建含值的 QVarianttoT()转换为具体类型如toInt()、toString()valueT()模板方式取值适用于自定义类型canConvertT()判断能否转换为类型 Tconvert(int)强制类型转换type()/userType()获取存储类型typeName()获取类型名称字符串isNull()是否为空值isValid()是否为有效类型clear()清空为UnknownTypeend~

相关新闻

最新新闻

Ceph 架构复杂?轻量级统一存储 PowerFS 技术方案解析

Ceph 架构复杂?轻量级统一存储 PowerFS 技术方案解析

文章导读Ceph 是一款成熟通用分布式存储系统,适配大规模集群场景,完整支持块、文件、对象多协议存储。但对于中小规模 AI 训练集群、高校 HPC 超算、混合负载数据平台,完整部署整套 Ceph 架构会带来较高运维门槛,同时原生缺少 KV …

2026/7/9 12:32:05
昇腾 PyTorch 模型迁移实战:3步将 GPU 代码适配 NPU,吞吐提升 1.8 倍

昇腾 PyTorch 模型迁移实战:3步将 GPU 代码适配 NPU,吞吐提升 1.8 倍

昇腾 PyTorch 模型迁移实战:3步极简改造实现性能跃迁当我在华为云AI训练平台上第一次看到昇腾NPU的实测数据时,那个1.8倍的吞吐量提升数字确实让人眼前一亮。作为长期使用NVIDIA GPU的开发者,我们早已习惯了CUDA生态的"舒适区"&…

2026/7/9 12:32:05
计算机毕业设计之考研交流平台

计算机毕业设计之考研交流平台

随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,考研交流平台当然也不能排除在外,从备考资料、课程学习的统计和分析,在过程中会产生大量的、各种各样的…

2026/7/9 12:32:05
PIC18F45K22与CMT-8540S-SMT蜂鸣器的嵌入式音频开发指南

PIC18F45K22与CMT-8540S-SMT蜂鸣器的嵌入式音频开发指南

1. 项目概述与硬件选型解析在嵌入式开发中,为项目添加声音交互功能是提升用户体验的重要手段。这次我选择了PIC18F45K22微控制器搭配CMT-8540S-SMT磁性蜂鸣器的方案,这个组合特别适合需要紧凑设计的中小型项目。PIC18F45K22作为Microchip的8位MCU&#x…

2026/7/9 12:32:05
济宁智慧养老解决方案选型指南:从“响应闭环”破解服务真伪

济宁智慧养老解决方案选型指南:从“响应闭环”破解服务真伪

作为一个在智慧养老行业摸爬滚打了6年的从业者,我经常被济宁的朋友问到:“给长辈挑智慧养老方案,到底怎么判断靠不靠谱?”本文专为正在为长辈筛选养老服务、对技术术语不熟悉但担心踩坑的济宁子女而写。我将用行业内视角&#xff…

2026/7/9 12:32:05
魔兽争霸III终极兼容性修复指南:WarcraftHelper完整解决方案

魔兽争霸III终极兼容性修复指南:WarcraftHelper完整解决方案

魔兽争霸III终极兼容性修复指南:WarcraftHelper完整解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为一款经典即时…

2026/7/9 12:27:05

月新闻