Wie erhalte ich eine gültige Instanz eines QQuickItem auf C ++ - Seite?
In Ordung. Ich habe viel gesucht, aber noch keine gute Lösung gefunden. Ich bin neu beiQt
. Ich habe eine Klasse, die ein @ iQQuickItem
wie so,
class MyQuickItemClass : public QQuickItem
{
Q_OBJECT
SetInfo(SomeCppClass object)
};
Ich mache einqmlRegisterType
in meinemmain.cpp
um es auf dem @ zu registrierqml
Seite wie folgt,
qmlRegisterType <MyQuickItemClass> ("MyQuickItemClass", 1, 0, "MyQuickItemClass");
lles in Ordnung, bis hier. Aber -> Ich möchte eine Objektinstanz und einige Eigenschaften in MyQuickItemClass festlegen, die auch eine C ++ - Logik enthalten und dann das @ übergebeMyQuickItemClass
Objekt zuqml
. Oder erhalten Sie eine gültige Instanz vonMy,QuickItemClass
von Qml.ie bekomme ich eine vlid-InstanMyQuickItemClass
Objektinstanz vonQML
auf C ++ Seite inmain.cpp
?
Ich habe versucht, Folgendes aus dem Link zu lernenHie. Aber diese Technik erzeugt zwei separate Objekte vonMyQuickItemClass
. Einer vonQML
, & eins vonc++
Seite. Daher funktioniert das bei mir nicht.
Folgendermaßen versuche ich, dies nach vielem Suchen zu tun.
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();
}
Aber wenn Sie das oben genannte tun, erhalten Sie den Konstruktor vonMyQuickItemClass
zweimal angerufen. Einmal voncpp
Seite, als ich ein Objekt erstellt habe, und einmal vonqml
Seite. Verifiziert dies durch Platzieren eines Haltepunkts im Konstruktor vonMyQuickItemClass
auch. Als Ergebnis,someCppClassObject
, das ich gesetzt hatte, ist null inMyQuickItemClass
wenn das Programm läuft. Weil qml den letzten Aufruf an @ gemacht hMyQuickItemClass
instanziieren, also das @ ignorierMyQuickItemClass
Objekt, das ich in @ erstellt hamain.cpp
.
Hier ist meinqml
code fürMyQuickItemClass
:
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
}
Und dies ist die C ++ - Klasse, deren Objekt in @ gesetzt werden muMyQuickItemClass
.
SomeCppClass {
//Pure C++ class. No Qt
}
Bitte beachte, dass ich @ behalten muMyQuickItemClass
abgeleitet vonQQuickItem
. Bitte vorschlagen..