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解决了类型统一存储、传递的问题。
核心定位
- 统一接口参数 / 返回值:信号槽、Model/View、属性系统、配置读写、Item 数据都靠它传任意类型;
- 类型自动安全转换,自带类型识别;
- 不依赖模板,跨模块通用。
二、支持存储的所有类型大类
1. 基础 C++ 原生类型
int、short、long long、unsigned int、bool、float、double、char
2. Qt 内置基础类型
QString、QByteArray、QDate、QTime、QDateTime、QPoint、QPointF、QRect、QRectF、QSize、QSizeF、QColor、QFont、QPixmap、QImage、QUrl、QVariantList、QVariantMap
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