Qt:QVariant
0、说明
QVariant可以表现出Qt数据类型中最普遍的行为。
一个QVariant对象中一次只保留一个type()的单个值(有的type()可以是多值的,例如StringList),可以用convert()将它的类型转换为不同的类型,用toT()(这里的并不是实际的函数,T是一个泛型)获取它的值,如toInt(), toString(),它们返回的值是const的。
如果一个QVariant在定义时就是一个null值,那么它在转化为其它类型时,依然是null。
GUI类型
由于QVariant是Qt Core模块的一部分,所以它并不提供和Qt GUI类型(如QColor、QImage、QPixmap)进行转换的函数,也就是说,不存在toColor()函数。不过,我们可以用QVariant::value()或qvariant_cast()模板函数进行转换,例如,下文是把一个QVariant转换为QColor的代码:
QVariant variant;
...
QColor color = variant.value<QColor>();
逆向转化(将QColor转换为QVariant)对所有类型(包括Core和GUI)都是自动进行的:
QColor color = palette().background().color();
QVariant variant = color;
1、模块和加载项
Header: | #include <QVariant> |
qmake: | QT += core |
2、构造
QVariant(QType val) | 这里的QType是指Qt中常见的如float、qlonglong、int、QMap、QDateTime等类型,因为太多了,基本上常用的都涵盖其中了,所以这里不再写全 |
5、静态方法
返回值类型 |
方法 |
说明 |
QVariant | fromStdVariant(std::variant<Types...> value) | 返回一个指定类型Types和值value的QVariant |
QVariant | fromValue(T value) | 返回包含了指定类型T和值value的QVariant |
QVariant::Type | nameToType(const char *name) | 返回name代表的Type |
const char * | typeToName(int typeId) | 返回Type的name |
6、实例方法
返回值类型 |
方法 |
说明 |
QVariant & bool bool |
operator=(QVariant variant) operator!=(QVariant v) operator==(QVariant v) |
赋值 是否相等 |
bool |
canConvert(int targetTypeId) |
是否可以转化为指定类型 |
void | clear() | 将类型转化为QMetaType::UnknownType并释放占有的资源 |
bool | convert(int targetTypeId) | 将QVariant转化为需要的类型 |
bool | isNull() | 是否为null |
bool | isValid() | 是否合法,即不是QMetaType::UnknownType |
void | setValue(T value) | 设置QVariant的值 |
void | swap(QVariant &other) | 交换两个QVariant的值 |
T | toT() | 将QVariant转换为T并返回 |
QVariant::Type | type() |
返回QVariant中值的类型 |
const char * | typeName() | 返回QVariant中值的类型的const char *形式 |
int | userType() | 返回QVariant中值的类型 |
template <typename T> T | value() |
常用于非core类型T的转换,当然core类型也可以转换 QVariant v; MyCustomStruct c; if (v.canConvert<MyCustomStruct>()) c = v.value<MyCustomStruct>(); v = 7; int i = v.value<int>(); // same as v.toInt() QString s = v.value<QString>(); // same as v.toString(), s is now "7" MyCustomStruct c2 = v.value<MyCustomStruct>(); // conversion failed, c2 is empty |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性