QQmlContext::setContextProperty()
を使用してqmlのカスタムクラスへのポインタを割り当てる必要があります。もう1つのqmlオブジェクトには同じタイプのQ_PROPERTY
があります。カスタムクラスポインタを持つQVariantが同じアドレスを返さない
単純なテストでは、変換が私の思ったようにうまくいかないことがわかりました。私は本当にQVariant
にそれを変換した後、再び同じポインタを取得したいと思い
metaTypeId = 1024
TestClass::TestClass()
0x1b801e0 QVariant(TestClass*,) 0x0
:
#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;
}
この小さなテストアプリケーションは、私にこのような出力を提供します。後でそれをqmlコンテキストに割り当てると、会話は正しく動作するはずです。
を[ 'QVariant :: [値]](HTTP://doc.qt .io/qt-5/qvariant.html#value):* QVariantに格納されたポインタがTにqobject_castできる場合、その結果が返されます。それ以外の場合は、ヌルポインタが返されます。これは、Q_OBJECTマクロを使用するQObjectサブクラスでのみ機能することに注意してください。*ポインタを 'QVariant'に格納する場合は、' void * 'として格納する必要があります。 – thuga
void *をQVariant-Typeとして使用する場合、qmlとのインタフェースのための 'Q_PROPERTY'は' TestClass * 'ですか?クラスが私によって書かれていないので、私はqmlを通して転送したいクラスにQ_OBJECTマクロを追加できません。 –
目的のために設計されていないQMLにオブジェクトを渡す目的は何ですか? – m7913d