大丈夫。私はたくさん検索しましたが、まだ良い解決策がありません。私は初めてQtです。QQuickItem私はそのようなクラスを持っています、
class MyQuickItemClass : public QQuickItem
{
Q_OBJECT
SetInfo(SomeCppClass object)
};
このように横に登録するのqmlRegisterTypeを自分でやるのですが、main.cppqml
qmlRegisterType< MyQuickItemClass >("MyQuickItemClass", 1, 0, "MyQuickItemClass");
ここまでは大丈夫。しかし->オブジェクトインスタンスといくつかのプロパティを MyQuickItemClass に設定し、その中にいくつかのC++ロジックも設定してから、MyQuickItemClassオブジェクトをに渡しますqml。または、MyQuickItemClassQml から有効なインスタンスを取得します。C++ 側から vlid インスタンス オブジェクト インスタンスを取得するにはどうすればよいですか?MyQuickItemClassQMLmain.cpp
ここのリンクから次の学習を行ってみました。しかし、この手法では の 2 つの別個のオブジェクトが作成されますMyQuickItemClass。からQML1 つ、c++側面から 1 つ。したがって、私にはうまくいきません。
以下は、多くの検索の後にこれを実行しようとしている方法です。
int main(int argc, char *argv[])
{
qmlRegisterType< MyQuickItemClass >("MyQuickItemClass", 1, 0, "MyQuickItemClass");
QQmlApplicationEngine engine;
SomeCppClass someCppClassObject;
someCppClassObject.updateSomething();
MyQuickItemClass myquickItemObject;
myquickItemObject.SetInfo(someCppClassObject);
engine.rootContext()->setContextProperty("myquickItemObject", &myquickItemObject);
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
return app.exec();
}
しかし、上記を実行すると、コンストラクターがMyQuickItemClass2 回呼び出されます。cppオブジェクトを作成したときに横から 1 回、横から 1回qml。のコンストラクターにもブレークポイントを配置して、これを確認しましたMyQuickItemClass。その結果、プログラムの実行時にsomeCppClassObject設定したものは内部で null になります。MyQuickItemClassqml がインスタンス化するための最後の呼び出しを行ったため、で作成したオブジェクトはMyQuickItemClass無視されます。MyQuickItemClassmain.cpp
これが私のqmlコードですMyQuickItemClass:
import QtQuick 2.5
import MyQuickItemClass 1.0
ParentContainerItem {
id: parentItem
color: "black"
MyQuickItemClass {
id: myQuickItemID
visible: true
objectName: "myQuickItem"
property bool someProperty1: false
property bool someProperty2: true
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
}
//Other qml components
}
これは、オブジェクトを に設定する必要がある C++ クラスですMyQuickItemClass。
SomeCppClass {
//Pure C++ class. No Qt
}
MyQuickItemClassから派生したままにしておく必要があることに注意してくださいQQuickItem。提案してください...