Следующий код вызывает ошибку сегментации при использовании 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 , но я не могу понять исходный код ...
Вопрос в том,
- Указатель - это все, что мне нужно, а не данные, есть ли способ получить его?
- Должен ли я это сделать (привести удаленный указатель)?
- Любой совет для моего модульного теста, я должен просто удалить его или есть лучшее решение?
Спасибо