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