Сначала возникли некоторые проблемы с вашим кодом:
QVariant::canConvert()
возвращает, может ли тип значения быть конвертируемым вообще, если не может быть преобразовано фактически содержащееся в нем значение. Пример: вы создаете QVariant с QString в качестве значения. Вызов myValue.canConvert<double>()
вернет true , даже если ваша строка была "ерундой". Это связано с тем, что QVariant обычно способен преобразовывать строки типа «1.0» в двойное значение 1,0.
QVariant::isValid()
возвращает значение, не содержащее тип QMetaType::UnknownType
. Это в основном происходит только при создании QVariant без присвоения значения.
QVariant m_model = 0;
создаст QVariant с типом int. Не делай этого. Просто объявите это без = 0
части. QVariant (как и другие типы значений в Qt, т.е. QString, QSize et c.) Не нужно инициализировать, чтобы он был нулевым, пустым или недействительным. Если вы объявите это так, как вы, будет isValid()
return true , хотя вы можете захотеть вернуть false .
Тем не менее я не уверен, чего вы хотите достичь в своем фрагменте кода. В основном вы тестируете m_model
перед , присваивая ему новое непроверенное значение var
(почему ???).
Как вы сказали, ваше значение var
(или, возможно, содержащееся в нем значение) могло быть удалено непосредственно перед вызовом setValue()
. Если объект QObject был удален, а указатель не был явно установлен на nullptr
, вы передаете QVariant с висящим указателем на функцию. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * * * 1036].