Qt QVariant
QVariant 介绍
QVariant 支持内置的 QMetaType 类型,可以和这些类型之间互相转换。
自定义类型转换为 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;
}
输出:
可以看到 v3
,转换为 int
类型失败,但 v3.canConvert<int>()
结果为 true
。