Как получить действительный экземпляр QQuickItem на стороне C ++

Хорошо. Я много искал, но пока не нашел хорошего решения. Я новичок вQt, У меня есть класс, который являетсяQQuickItem вот так,

class MyQuickItemClass : public QQuickItem
{
    Q_OBJECT
    SetInfo(SomeCppClass object)
};

Я делаюqmlRegisterType в моемmain.cpp зарегистрировать его наqml сторона, как это,

qmlRegisterType <MyQuickItemClass> ("MyQuickItemClass", 1, 0, "MyQuickItemClass");

Все хорошо, пока здесь. Но -> я хочу установить экземпляр объекта и некоторые свойства в MyQuickItemClass, которые также содержат некоторую логику C ++, а затем передатьMyQuickItemClass Возражатьqml, Или получите действительный экземплярMy,QuickItemClass из Qml.Как я могу получить экземпляр vlidMyQuickItemClass экземпляр объекта изQML на стороне C ++ вmain.cpp ?

Я попытался сделать следующее обучение по ссылкеВот, Но эта техника создает два отдельных объектаMyQuickItemClass, Один изQML, и один изc++ боковая сторона. Следовательно, не работает для меня.

Вот как я пытаюсь сделать это после долгих поисков.

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();
}

Но, делая выше, получает конструкторMyQuickItemClass звонил дважды. Однажды изcpp сторона, когда я создал объект, и один раз изqml боковая сторона. Подтвердите это, разместив точку останова в конструктореMyQuickItemClass также. В следствии,someCppClassObject то, что я установил, равно нулю внутриMyQuickItemClass когда программа запускается Потому что qml сделал последний вызовMyQuickItemClass чтобы создать экземпляр, таким образом игнорируяMyQuickItemClass объект, который я создал вmain.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, Пожалуйста, предложите ...

Ответы на вопрос(2)

Ваш ответ на вопрос