Как получить действительный экземпляр 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
, Пожалуйста, предложите ...