QVariant com ponteiro de classe personalizada não retorna o mesmo endereço
Preciso atribuir um ponteiro para uma classe personalizada em qml usandoQQmlContext::setContextProperty()
. Outro objeto qml possuiQ_PROPERTY
do mesmo tipo para recuperá-lo novamente.
Um teste simples me mostrou que a conversão não funciona como eu pensava.
#include <QCoreApplication>
#include <QDebug>
#include <QMetaType>
class TestClass
{
public: TestClass() { qDebug() << "TestClass()::TestClass()"; }
};
Q_DECLARE_METATYPE(TestClass*)
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
qDebug() << "metaTypeId =" << qMetaTypeId<TestClass*>();
auto testObject = new TestClass;
QVariant variant(qMetaTypeId<TestClass*>(), testObject);
auto test = variant.value<TestClass*>();
qDebug() << testObject << variant << test;
return 0;
}
Este pequeno aplicativo de teste fornece uma saída como esta:
metaTypeId = 1024
TestClass::TestClass()
0x1b801e0 QVariant(TestClass*, ) 0x0
Eu realmente gostaria de obter o mesmo ponteiro novamente depois de convertê-lo em umQVariant
. Mais tarde, atribuí-lo-ei a um contexto qml e a conversa deve funcionar corretamente.