Qt QVariant

QVariant 介绍

QVariant 支持内置的 QMetaType 类型,可以和这些类型之间互相转换。

QVariant

自定义类型转换为 QVarient 使用

有些函数的参数为 QVariant,如果要使用自定义的结构体或者枚举作为参数,则需要用 Q_DECLARE_METATYPE 宏声明:

enum CusType
{
    TYPE_ONE = 1,
    TYPE_TWO = 2,
    TYPE_THREE = 3
};

Q_DECLARE_METATYPE(CusType)

void MainWindow::dealType()
{
    bool ok = false;
    //QVariant 转换为 QMeataType类型
    QVariant v1(123);
    qDebug() << "v1.typeName = " << v1.typeName() << ", canConvert<int>() = " << v1.canConvert<int>()
             << ", int  = " << v1.toInt(&ok) << ", ok = " << ok;

    QVariant v2("123");
    qDebug() << "v2.typeName = " << v2.typeName() << ", canConvert<int>() = " << v2.canConvert<int>()
             << ", int  = " << v2.toInt(&ok) << ", ok = " << ok;

    QVariant v3("123s");
    qDebug() << "v3.typeName = " << v3.typeName() << ", canConvert<int>() = " << v3.canConvert<int>()
             << ", int  = " << v3.toInt(&ok) << ", ok = " << ok;

    QString str3 = v3.value<QString>();


    QVariant v4(tr("123"));
    qDebug() << "v4.typeName = " << v4.typeName() << ", canConvert<int>() = " << v4.canConvert<int>()
             << ", int  = " << v4.toInt(&ok) << ", ok = " << ok;

    //自定义类型转换为 QVariant
    QVariant v5 = QVariant::fromValue(CusType::TYPE_ONE);
    qDebug() << "v5.typeName = " << v5.typeName() << ", canConvert<int>() = " << v5.canConvert<int>()
             << ", int  = " << v5.toInt(&ok) << ", ok = " << ok;

    //QVariant 转换为 自定义类型
    int i5 = v5.value<CusType>();
    qDebug() << "i5 = " << i5;
}

输出:
1

可以看到 v3 ,转换为 int 类型失败,但 v3.canConvert<int>() 结果为 true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值