Я использую QMetaObject
получить свойство моего объекта, некоторые из этих свойств являются указателями на классы, которые наследуют QObject, при использовании QMetaProperty::read
я вернусь QVariant
, содержащий указатель на значение этого свойства.Как определить, если QVariant, представляющий QObject * является нулевым
Учитывая, что QVariant
Я не могу определить, является ли базовое значение нулевым или нет.
Я написал модульное тестирование, чтобы показать проблему при условии, что вы уже есть 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*>()
однако этот бросок са сегментацииvalue.value<QObject*>() == nullptr
это также бросает Segfaultvalue.value<void*>() == nullptr
это всегда возвращает истину
Поэтому я пытаюсь сделать это, чтобы преобразовать произвольные объекты QObject в JSON, но это не важно в этой области ,
Каков тип метатипа для qvariant, вызывающий у вас головную боль? – Yakk
мета тип QObject * – Eluvatar
Можете ли вы дать мне строку кода, которую вы использовали для определения этого? – Yakk