3.1.7.Qt容器大家族(3):QVariant——万能盒子

发布时间:2026/7/30 2:30:49
3.1.7.Qt容器大家族(3):QVariant——万能盒子 1.内容介绍前几节课的容器课我们讲解了QList、QString和QStringList它们都有一个共同点存什么类型就得声明什么类型。但是这时候如果我们需要一个能装任意类型的容器比如表格里的一行数据可能包含各种类型的信息比如int、double、QString等等等等这时候要怎么办呢我们就要邀请我们的老四登场啦它就是我们今天要讲的——QVariant2.讲解QVariant1.什么是QVariantQVariant嘛简单来说它是一个万能盒子什么类型都能往里面装要装也很容易直接赋值就行和普通变量赋值一模一样QVariant v1 42; //int QVariant v2 3.14; //double QVariant v3 Hello; //QString QVariant v4 QColor(255, 255, 255); //QColor存储颜色这个以后会讲当然我们也可以用fromValue函数来存储。QVariant var QVariant::fromValue(QColor(255, 255, 255));不管是int、double还是Qt的类型甚至是你自己的类型它都能装进去当然装进去就得取出来怎么取出来呢2.怎么把数据取出来装进去很容易取出来时我们要告诉这个万能盒子“要取出来什么类型”。很多的常见类型Qt都帮你写好了转化的函数像是toInt啊toDouble啊toString啊Qt都搞好了当然有些类型Qt没写好我们就要用模板函数value了比如QColor啊QFont什么的。以后都会讲到int a v1.toInt(); // 取出 int double b v2.toDouble(); // 取出 double QString c v3.toString(); // 取出 QString QColor d v4.valueQColor(); // 取出 QColor //这里就需要模板函数value了因为QColor没有专门的方法Qt总不能把所有的都写一个方法吧我们这里有一个注意事项转化的类型不匹配不会报错或者抛出异常但是可能会返回一个空值。比如0或空字符串看到了吗QVariant很聪明会尽量帮你完成类型转化。那么QVariant有什么用呢3.有什么用QVariant最常用的场景就是用在表格控件一行会有多种数据类型不同所以QVariant就是一个很好的选择。还有信号槽传参、配置文件读写什么的QVariant都有它的用武之地。那你可能就会问了自己的类型能不能传递呢4.能不能传递自己的自定义类型当然可以只不过你需要一个小操作就是注册。你需要用一个叫做Q_DECLARE_METATYPE的宏去注册一下这个类型如果不注册的话QVariant就不会认识你这个类型取出来的时候就会有问题。#include QMetaType //要用这个头文件 struct Student { QString name; int age; }; Q_DECLARE_METATYPE(Student) // 注册 // 装进去 Student s{小明, 18}; QVariant v QVariant::fromValue(s); // 取出来 Student s2 v.valueStudent();QVariant我们就讲完啦是不是非常简单呢对了你们有没有发现这几节课我都没有让你们写头文件这是为什么呢因为它们根本不用写头文件为什么不用写头文件呢因为这些容器的头文件都被Qt的控件给用烂了绝对会包含它们就连QObject都会用到所以我告诉你们QObject的属性系统传递的就是QVariant厉害吧好啦这节课就到这里我们下节课再见拜拜

相关新闻

最新新闻

日新闻

周新闻

月新闻