Qt QVariant类

QtQVariant QVariant似于C++联合(union)数据型,它不仅能够保很多Qt型的值,包括QColor,QBrush,QFont,QPen,QString和QSize等,也能够Qt的容器型的值。Qt的很多功能都是建立在QVariant基础上的,如Qt的对象属性及数据库功能等。 DEMO #include "widget.h" #include <QDebug> #... 阅读详情
      这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用。比如我们的 table单元格可以是string,也可以是int,也可以是一个颜色值,那么这么多类型怎么返回呢?于是,Qt提供了这个QVariant类型,你可以把这很多类型都存放进去,到需要使用的时候使用一系列的to函数取出来即可。比如你把int包装成一个QVariant,使用的时候要用 QVariant::toInt()重新取出来。这里需要注意的是,QVariant类型的放入和取出必须是相对应的,你放入一个int就必须按int取出,不能用toString(), Qt不会帮你自动转换。
数据核心无非就是一个 union,和一个标记类型的type:传递的是整数 123,那么它union存储整数123,同时type标志Int;如果传递字符串,union存储字符串的指针,同时type标志QString。
QVariant 属于 Qt 的Core模块,属于Qt的底层核心之一,ActiveQt、QtScript、QtDeclarative等都严重依赖于QVariant。
QVariant 可以保存很多Qt的数据类型,包括QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、 QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,并且还有C++基本类型,如 int、float等。QVariant还能保存很多集合类型,如QMap<QSTRING, QVariant>, QStringList和QList。item view classes,数据库模块和QSettings都大量使用了QVariant类,,以方便我们读写数据。     

       QVariant类作为一个最为普遍的Qt数据类型的联合。

因为c++禁止没有构造函数和析构函数的联合体,许多继承的Qt类不能够在联合体当中使用。(联合体当中的变量共用一个存储区),没有了联合变量,我们在物体属性以及数据库的工作等方面受到很多的困扰。

一个QVariant对象在一个时间内只保留一种类型的值。我们可以使用canConvert来查询是否能够转换当前的类型。转换类型一般以toT()命名.
     摘录了一个example来说明QVariant的使用方法:

      
    QVariant v1(15);
    qDebug() << v1.toInt();    // 结果为15
    QVariant v2(12.3);
    qDebug() << v2.toFloat();  // 结果为12.3
    QVariant v3("nihao");
    qDebug() << v3.toString(); // 结果为"nihao"
    QColor color = QColor(Qt::red);
    QVariant v4 = color;
    qDebug() << v4.type();     // 结果为QVariant::QColor
    qDebug() << v4.value<QColor>(); // 结果为QColor(ARGB 1,1,0,0)

    QString str = "hello";
    QVariant v5 = str;
    qDebug() << v5.canConvert(QVariant::Int); // 结果为true
    qDebug() << v5.toString();                // 结果为"hello"
    qDebug() << v5.convert(QVariant::Int);    // 结果为false
    qDebug() << v5.toString();                // 转换失败,v5被清空,结果为"0"



Qt中的QVariant QVariant似于C++联合(union)数据型,它不仅能够保很多Qt型的值,包括QColor,QBrush,QFont,QPen,QString和QSize等,也能够Qt的容器型的值。Qt的很多功能都是建立在QVariant基础上的,如Qt的对象属性及数据库功能等。 阅读详情

相关推荐

Qt框架之QVariant

如果需要在 `QVariant` 中储自定义型,需要确保实现了正确的序列化和反序列化逻辑。// ...

CSUC的博客 1471

QVariant 放指针

QVariant v = QVariant::FromValue((void *) yourPointerHere); yourPointer = (YourClass *) v.value();

happyrabbit456的专栏 3332

QTQVariant的使用

详细说明 对于最常见的Qt数据型,QVariant的作用似于联合。 因为C ++禁止联合包含具有非默认构造函数或析构函数的型,所以大多数有趣的Qt不能在联合中使用。如果没有QVariant,这对于QObject :: property()和数据库工作等都是一个问题。 一个QVariant对象一次拥有单个type()的单个值。 (某些type()是多值的,例如字符串列表。)您可以找出哪种型T(该变体可以保),使用convert()将其转换为其他型,并使用toT之一获取其值。 ()函数(例如to

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1805

QVariant 取任意型的指针 、自定义数据型(****)

QVariant 取任意型的指针,自定义数据

ken2232的博客 3399

QVariant指针数据

QVariant默认无法保指针数据,因为以void *为参数的QVariant构造函数是私有的。 但通过QT提供的Meta Type机制,可以将任意指针放到QVariant中。 需要使用Q_DECLARE_METATYPE宏注册型。 1 2 3 Q_DECLARE_METATYPE(QStandardItem...

weixin_30426879的博客 1273

QVariant指针

QVariant指针 使用QCombobox过程中发现addItem的第二个参数可以保Qvariant型的数据,常用数据肯定可以,如果是指针的话,就会有更大的用处。 //保 QVariant var=QVariant::fromValue((void*)event); //获取 QPaintEvent* e=(QPaintEvent*)var.value<void*>(); ...

简介 2514

QT基础之QVariant

简单介绍了QVariant

墨1024 8032

Qt共用体[QVariant]

Qt共用体

星辰的博客 1111

QT-QVariant应用

QVariantQt 中一个非常强大的,提供了灵活的数据储和访问方式。通过合理使用 QVariant,可以简化数据处理和管理,提高代码的可维护性。

小王爱吃月亮糖的博客 1749

Qt中的QVariantAPI讲解

QVariant这个很神奇,或者说方便。很多时候需要几种不同的数据型需要传递,如果用结构体,又不大方便,容器保的也只是一种数据型,而QVariant可以通通搞定 QVariant 这个型充当着最常见的数据型的联合,可以保很多Qt的数据型,包括QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,并且还有C++基本型,如int、f

GiGi_Princess的博客 421

Qt QVariant应用

Qt QVariant应用

qq_61553520的博客 1449

Qt学习03——QVariant

QVariant似于C++的union数据型,能保多种Qt型的值及Qt容器的值。本文将通过一个实例学习QVariant的用法

shawn06 850

Qt学习 QVariant(转)

QVariant作为一个最为普遍的Qt数据型的联合。 因为c++禁止没有构造函数和析构函数的联合体,许多继承的Qt不能够在联合体当中使用。(联合体当中的变量共用一个储区),没有了联合变量,我们

dearbaba_8520的博客 388

QtQVariant

QtQVariant

敖丙007的博客 356

Qt之·QVariant·数据型】

QVariantQt 框架中的一种数据型,它可以用来储任意型的数据。QVariant 是一个通用的数据容器,它可以储基本数据型(如 int、float 等)C++基本型,如int、float等。Qt的数据型,包括。

m0_66203017的博客 939

Qt - 容器(QVariant)

容器 QVariant QVariantQt的共用体union数据型,不仅能保很多Qt型的值,包括QColor,QBrush,QFont,QRect,QString及QSize等等,而且能Qt的容器型值。 可采用toT()将QVariant对象转换称为T型并获取其值。如toInt(),toFloat(),toString(),可用type方法获取数据型,判断数据是否可。对于GUI模块中定义的数据型没有相应的转换函数,即没有toColor(),没有toImage()这样的函数提供,可通

weifc-wei 的博客 412

聊聊Qt 中的多面手之QVariant 变体

聊聊Qt 中的多面手之QVariant 变体

qianniulaoren的博客 1079
上一篇: Qt多线程
Ryan-Zhang
博客等级 码龄15年 33粉丝 35原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值