QVariant方法功能(QT5.12)


//for starf study

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QDebug>
#include<QVariant>
#include<QJsonObject>

//QVariant类就像最常见的Qt数据类型的并集。union { char c; int i;double d;QString ;QDate;..}data;
//union联合体中包含所有自带的基本类型
//QVariant类管理着这样一个union

typedef struct MyCustomStructStruct{
    QString name;
    int age;
}MyCustomStruct;
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QVariant va = 42; //直接用一个已经存在的类对象来初始化QVariant对象
    QVariant var = QVariant(QVariant::BitArray); //构造类型的未初始化变量。这
                                                                          //将在特殊的空状态下创建一个变量,如果访问该变量,它将返回该类型的默认构造值。
                                    //参数QVariant::Type 包含了所有的基本数据类型,也就是QVariant支持的数据类型

    const QJsonObject json = QJsonObject();
    QVariant var2 = QVariant(&json);     //构造一个 json对象值val的新变量。
                    //参数可以替换成其他类型对象
   qDebug()<<va.canConvert(QVariant::BitArray); // 判断对象是否能转换成参数里的类型
   var2.clear(); //将此变量转换为QMetaType::UnknownType类型,并释放所有使用的资源。
   qDebug()<<var2.convert(QVariant::Int); //将变量强制转换为指定类型,转换失败则保持原类型,返回true
   var2.setValue(5); //变量会存储参数 包含类型和值
   MyCustomStruct s;
 //  QVariant var3 = QVariant::fromValue(s); //返回包含值副本的QVariant。否则,其行为与setValue()完全相同。
            //这种方法必须先注册新的自定义变量
   qDebug()<<var2.isNull(); //如果是空变量  返回true
   qDebug()<<var2.isValid(); //如果此变量的存储类型不是QMetaType::UnknownType,则返回true;
   qDebug()<<QVariant::nameToType("int"); //将名称中给定的存储类型的字符串表示形式转换为其枚举表示形式。
   qDebug()<<var2.toBool(); //转换为bool类型
   qDebug()<<var2.toInt(); //转换为int类型
            //类似的  可以转换为所有系统支持的其他类型 当然可能转换失败
   qDebug()<<var2.type(); //返回当前变量的类型的枚举值
   qDebug()<<var2.typeName(); //返回当前变量的名称
   qDebug()<<QVariant::typeToName(QVariant::Double);//获得指定类型的名称
   qDebug() <<var2.userType(); //返回变量中存储的值的存储类型。对于非自定义类型,这与type()相同。
   int i = va.value<int>(); //T QVariant::value() const   返回转换为模板类型T的存储值 canConvert()以确定是否可以转换类型
}

MainWindow::~MainWindow()
{
    delete ui;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值