我需要使用QQmlContext::setContextProperty()
爲qml中的自定義類指定一個指針。另一個qml對象具有相同類型的Q_PROPERTY
以再次檢索它。帶自定義類指針的QVariant不返回相同的地址
一個簡單的測試表明,轉換不像我想象的那樣工作。
#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;
}
這個微小的測試應用程序,讓我這樣的輸出:
metaTypeId = 1024
TestClass::TestClass()
0x1b801e0 QVariant(TestClass*,) 0x0
我真的想將它歸結爲一個QVariant
後再次獲得相同的指針了。稍後我會將其分配給qml上下文,然後該對話必須正常工作。
['的QVariant :: value'(HTTP://doc.qt .io/qt-5/qvariant.html#value):*如果存儲在QVariant中的指針可以被qobject_cast爲T,那麼返回該結果。否則,返回空指針。請注意,這僅適用於使用Q_OBJECT宏的QObject子類。*如果要將指針存儲在'QVariant'中,則必須將其存儲爲'void *'。 – thuga
如果我將使用void *作爲QVariant-Type,那麼用於與qml接口的'Q_PROPERTY'仍然是一個'TestClass *'?我不能將Q_OBJECT宏添加到我想通過qml傳輸的類中,因爲該類不是由我編寫的。 –
將對象傳遞給不是爲其設計的QML的目標是什麼? – m7913d