私のオブジェクトからプロパティを取得するのにQMetaObject
を使用していますが、これらのプロパティの一部はQObjectから継承したクラスへのポインタですQMetaProperty::read
QVariant
そのプロパティの値へのポインタQObject *を表すQVariantがnullであるかどうかを調べるには
と仮定すると、QVariant
は、基になる値がnullかどうかを判断できません。
私はあなたがすでにここQVariant
TEST(utilsTests, isNull)
{
QObject* object1 = new QObject();
QObject* object2 = nullptr;
EXPECT_NE(nullptr, object1);
EXPECT_TRUE(object2 == nullptr);
QVariant variant1 = QVariant::fromValue(object1);
QVariant variant2 = QVariant::fromValue(object2);
EXPECT_FALSE(Utils::isNull(variant1));//test passes
EXPECT_TRUE(Utils::isNull(variant2));//test fails
}
そして私はUtils::isNull
bool Utils::isNull(QVariant value)
{
return value.isNull() ||
value.data() == nullptr ||
value.data() == NULL ||
value.data_ptr().is_null == 1 ||
value == QVariant() ||
value == NULL;
}
の実施のためのいくつかの他のものを試してみたものだ持って仮定の問題を示すために、ユニットテストを書いています試したことがあります:
value.canConvert<QObject*>()
しかし、このスローSAvalue.value<QObject*>() == nullptr
これをセグメンテーションフォールトもセグメンテーション違反value.value<void*>() == nullptr
、これは常に真
私はこれをやろうとしている理由は、JSONに任意のQObjectを変換することですが、それはこのスコープでは重要ではありませんを返します。
頭痛を引き起こすqvariantのメタタイプタイプは何ですか? – Yakk
メタタイプがQObject * – Eluvatar
あなたはそれを決定するために使用したコード行を教えてくれますか? – Yakk