//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;
}
QVariant方法功能(QT5.12)
最新推荐文章于 2024-08-19 06:34:05 发布