QT基础之QVariant类

文章目录


更多参见
QT基础与实例应用目录

QVariant类类似于C++的联合数据类型,既可以保存很多QT类型的值,包括QColor、QBrush、QFont、QPen、QRect、QString和QSize等,也可以存放QT容器类型值

GitHub链接 :GitHub

    QVariant v{709};
    qDebug()<<v.toInt(); // 709

    QVariant w{"Hello World"};
    qDebug()<<w; // QVariant(QString, "Hello World")
    qDebug()<<w.toString(); // "Hello World"

    QMap<QString,QVariant>map{{"int",709},{"double",3.14}};
    map["string"] = "Hello World";
    map.insert("color",QColor(255,0,0));
    // 调用相应的转换函数
    qDebug()<<map["int"]<<map["int"].toInt(); // QVariant(int, 709) 709
    qDebug()<<map["double"]<<map["double"].toDouble(); // QVariant(double, 3.14) 3.14
    qDebug()<<map["string"]<<map["string"].toString(); // QVariant(QString, "Hello World") "Hello World"
    qDebug()<<map["color"]<<map["color"].value<QColor>(); // QVariant(QColor, QColor(ARGB 1, 1, 0, 0)) QColor(ARGB 1, 1, 0, 0)

    QStringList sl;
    sl << "A" << "B" << "C" << "D";
    QVariant vt{sl};

    if(vt.type()==QVariant::StringList) {
        auto list = vt.toStringList();
        for (int i=0;i<list.size();++i ) {
            qDebug()<<list.at(i);
        }
    }

C++的各种初始化方式

qDebug()<<map["color"]<<map["color"].value<QColor>(); QVariant变量中保存了一个QColor对象,并使用模板QVariant::value()还原为QColorQVariantQtCOre模块的类,没有为QtGui模块中的数据类型,比如QColorQImageQPixmap等提供转换函数,需要使用QVariant::value()或者QVariantValue()

QVariant::type()函数返回存储在QVariant变量中的值得数据类型。QVariant::StringList是一个QVariant::type()枚举类型的变量。

这个枚举可以查看源码qvariant.h

    enum Type {
        Invalid = QMetaType::UnknownType,
        Bool = QMetaType::Bool,
        Int = QMetaType::Int,
        UInt = QMetaType::UInt,
        LongLong = QMetaType::LongLong,
        ULongLong = QMetaType::ULongLong,
        Double = QMetaType::Double,
        Char = QMetaType::QChar,
        Map = QMetaType::QVariantMap,
        List = QMetaType::QVariantList,
        String = QMetaType::QString,
        StringList = QMetaType::QStringList,
        ByteArray = QMetaType::QByteArray,
        BitArray = QMetaType::QBitArray,
        Date = QMetaType::QDate,
        Time = QMetaType::QTime,
        DateTime = QMetaType::QDateTime,
        Url = QMetaType::QUrl,
        Locale = QMetaType::QLocale,
        Rect = QMetaType::QRect,
        RectF = QMetaType::QRectF,
        Size = QMetaType::QSize,
        SizeF = QMetaType::QSizeF,
        Line = QMetaType::QLine,
        LineF = QMetaType::QLineF,
        Point = QMetaType::QPoint,
        PointF = QMetaType::QPointF,
        RegExp = QMetaType::QRegExp,
        RegularExpression = QMetaType::QRegularExpression,
        Hash = QMetaType::QVariantHash,
        EasingCurve = QMetaType::QEasingCurve,
        Uuid = QMetaType::QUuid,
#if QT_CONFIG(itemmodel)
        ModelIndex = QMetaType::QModelIndex,
        PersistentModelIndex = QMetaType::QPersistentModelIndex,
#endif
        LastCoreType = QMetaType::LastCoreType,

        Font = QMetaType::QFont,
        Pixmap = QMetaType::QPixmap,
        Brush = QMetaType::QBrush,
        Color = QMetaType::QColor,
        Palette = QMetaType::QPalette,
        Image = QMetaType::QImage,
        Polygon = QMetaType::QPolygon,
        Region = QMetaType::QRegion,
        Bitmap = QMetaType::QBitmap,
        Cursor = QMetaType::QCursor,
        KeySequence = QMetaType::QKeySequence,
        Pen = QMetaType::QPen,
        TextLength = QMetaType::QTextLength,
        TextFormat = QMetaType::QTextFormat,
        Matrix = QMetaType::QMatrix,
        Transform = QMetaType::QTransform,
        Matrix4x4 = QMetaType::QMatrix4x4,
        Vector2D = QMetaType::QVector2D,
        Vector3D = QMetaType::QVector3D,
        Vector4D = QMetaType::QVector4D,
        Quaternion = QMetaType::QQuaternion,
        PolygonF = QMetaType::QPolygonF,
        Icon = QMetaType::QIcon,
        LastGuiType = QMetaType::LastGuiType,

        SizePolicy = QMetaType::QSizePolicy,

        UserType = QMetaType::User,
        LastType = 0xffffffff // need this so that gcc >= 3.4 allocates 32 bits for Type
    };

希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值