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..

Antworten auf die Frage(4)

Ihre Antwort auf die Frage