Приведение удалило QOjbect * из QVariant, вызывает ошибку seg в Qt5 - PullRequest
1 голос
/ 12 марта 2020

Следующий код вызывает ошибку сегментации при использовании Qt5, но это не будет проблемой при использовании Qt4.

auto a = new QObject(); // need to be subclass of QObject, other class won't happen
auto v = QVariant::fromValue<QObject*>(a);
delete a;
auto p = qvariant_cast<QObject *>(v);

Вариант использования в моем проекте - модульное тестирование с использованием QSignalSpy:

...
// I need to check objects removed from model work as intended
// and objectRemoved signal delete object right after event received
QSignalSpy spy(&model, SIGNAL(objectRemoved(Object*)));
...
assertEqual(spy[0][0].value<Object*>(), myobject); // seg fault

Я проверил, что реализация qvariant_cast различается между Qt4 и Qt5 , но я не могу понять исходный код ...

Вопрос в том,

  1. Указатель - это все, что мне нужно, а не данные, есть ли способ получить его?
  2. Должен ли я это сделать (привести удаленный указатель)?
  3. Любой совет для моего модульного теста, я должен просто удалить его или есть лучшее решение?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...