news 2026/6/20 11:08:32

QVariant 完整详细介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QVariant 完整详细介绍

目录

QVariant 完整详细介绍

一、什么是 QVariant

核心定位

二、支持存储的所有类型大类

1. 基础 C++ 原生类型

2. Qt 内置基础类型

3. 对象指针(QObject 子类)

4. 自定义结构体 / 类

三、基础用法:存入、取出、类型判断

1. 存入数据(构造 /setValue)

2. 取出数据(toXX () 系列函数)

3. 模板取值 value()(推荐,强类型安全)

4. 判断存储的真实类型

四、两大复合容器:QVariantList / QVariantMap

1. QVariantList = QList 数组

2. QVariantMap = QMap 键值对

五、Qt 四大核心场景(高频使用)

场景 1:QObject 属性系统 Q_PROPERTY

场景 2:Model/View 视图框架(QTableWidget / QAbstractItemModel)

场景 3:信号槽传参(统一泛型参数)

场景 4:配置文件、JSON 序列化

六、存储自定义结构体 / 类(进阶)

七、常用关键成员函数速查表

八、常见坑与注意事项

九、极简对比


QVariant 完整详细介绍

一、什么是 QVariant

QVariant是 Qt 提供的通用数据容器,可以存放任意单一类型的数据,相当于 Qt 版的 “万能变量”。 C++ 原生没有统一的通用类型(int、double、QString、QWidget*、QDate 不能用同一个容器装),QVariant解决了类型统一存储、传递的问题。

核心定位

  1. 统一接口参数 / 返回值:信号槽、Model/View、属性系统、配置读写、Item 数据都靠它传任意类型;
  2. 类型自动安全转换,自带类型识别;
  3. 不依赖模板,跨模块通用。

二、支持存储的所有类型大类

1. 基础 C++ 原生类型

intshortlong longunsigned intboolfloatdoublechar

2. Qt 内置基础类型

QStringQByteArrayQDateQTimeQDateTimeQPointQPointFQRectQRectFQSizeQSizeFQColorQFontQPixmapQImageQUrlQVariantListQVariantMap

3. 对象指针(QObject 子类)

QObject*、各类控件指针(QWidget*、QPushButton*)

4. 自定义结构体 / 类

配合Q_DECLARE_METATYPE注册后,可存入 QVariant。

三、基础用法:存入、取出、类型判断

1. 存入数据(构造 /setValue)

cpp

运行

// 方式1:直接构造赋值 QVariant v1(123); QVariant v2("字符串"); QVariant v3(QString("Qt")); QVariant v4(true); QVariant v5(QColor(255,0,0)); // 方式2:setValue 动态修改 QVariant v; v.setValue(3.1415); v.setValue(QPointF(100,200));

2. 取出数据(toXX () 系列函数)

每个类型都有对应的转换函数,转换失败返回默认值:

cpp

运行

QVariant v(100); int num = v.toInt(); double d = v.toDouble(); QString str = v.toString(); bool b = v.toBool(); QVariant colorVar(QColor(Qt::red)); QColor c = co
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 11:08:18

3分钟掌握SiYuan笔记:终极特殊符号输入技巧指南

3分钟掌握SiYuan笔记:终极特殊符号输入技巧指南 【免费下载链接】siyuan A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. 项目地址: https://gitcode.com/GitHub_Trending/si/siyu…

作者头像 李华
网站建设 2026/6/20 11:05:32

从术语表到架构蓝图:深度解析MC68HC912BD32微控制器核心机制

1. 项目概述:从术语表到架构蓝图拿到一份芯片的技术手册,尤其是像MC68HC912BD32这样的老牌16位微控制器(MCU)的文档,很多工程师的第一反应可能是直接翻到电气特性、引脚定义或者具体模块的寄存器描述部分。这当然没错&…

作者头像 李华
网站建设 2026/6/20 10:57:08

React Native Map Link在电商应用中的实战:商品位置展示与导航

React Native Map Link在电商应用中的实战:商品位置展示与导航 【免费下载链接】react-native-map-link 🗺 Open the map app of the users choice. 项目地址: https://gitcode.com/gh_mirrors/re/react-native-map-link React Native Map Link是…

作者头像 李华
网站建设 2026/6/20 10:45:21

在 Mac 上找回纯粹写作体验:freewrite 开源项目深度解析

在 Mac 上找回纯粹写作体验:freewrite 开源项目深度解析 【免费下载链接】freewrite 项目地址: https://gitcode.com/gh_mirrors/fr/freewrite 你是否曾在写作时被各种通知、工具栏和复杂界面分散注意力?freewrite 这款开源 Mac 应用正是为了解决…

作者头像 李华
网站建设 2026/6/20 10:45:11

5分钟快速上手:免费城通网盘解析工具终极指南

5分钟快速上手:免费城通网盘解析工具终极指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载的漫长等待而烦恼吗?ctfileGet是一款完全免费的开源城通网盘解析…

作者头像 李华
网站建设 2026/6/20 10:43:49

5分钟上手!用biliTickerBuy轻松搞定B站会员购抢票难题

5分钟上手!用biliTickerBuy轻松搞定B站会员购抢票难题 【免费下载链接】biliTickerBuy b站会员购购票辅助工具 项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy 还在为B站会员购的演唱会门票、限量周边抢不到而烦恼吗?今天我要分…

作者头像 李华