Como obter uma instância válida de um QQuickItem no lado do C ++
Tudo bem. Pesquisei bastante, mas ainda não tenho uma boa solução. Eu sou novo emQt
. Eu tenho uma classe que é umaQQuickItem
igual a,
class MyQuickItemClass : public QQuickItem
{
Q_OBJECT
SetInfo(SomeCppClass object)
};
Eu faço umqmlRegisterType
no meumain.cpp
para registrá-lo noqml
lado assim,
qmlRegisterType <MyQuickItemClass> ("MyQuickItemClass", 1, 0, "MyQuickItemClass");
Tudo bem até aqui. Mas -> Eu quero definir uma instância de objeto e algumas propriedades em MyQuickItemClass que também tenham alguma lógica C ++ e depois passar oMyQuickItemClass
opor-se aqml
. Ou obtenha uma instância válida deMy,QuickItemClass
do Qml.Como posso obter uma instância vlidMyQuickItemClass
instância de objeto deQML
no lado C ++ emmain.cpp
?
Eu tentei fazer o seguinte aprendizado no linkaqui. Mas essa técnica cria dois objetos separados deMyQuickItemClass
. Um deQML
, e um dec++
lado. Portanto, não funciona para mim.
A seguir, é como estou tentando fazer isso depois de muita pesquisa.
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();
}
Mas, ao fazer o procedimento acima, obtém o construtor deMyQuickItemClass
ligou duas vezes. Uma vez decpp
lado quando eu criei um objeto, e uma vez deqml
lado. Verificou isso colocando um ponto de interrupção no construtor deMyQuickItemClass
também. Como um resultado,someCppClassObject
que eu tinha definido é nulo por dentroMyQuickItemClass
quando o programa é executado. Como o qml fez a chamada final paraMyQuickItemClass
instanciar, ignorando assim oMyQuickItemClass
objeto que eu crieimain.cpp
.
Aqui está o meuqml
código paraMyQuickItemClass
:
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
}
E esta é a classe C ++ cujo objeto precisa ser definido emMyQuickItemClass
.
SomeCppClass {
//Pure C++ class. No Qt
}
Por favor, note que eu preciso manterMyQuickItemClass
derivado deQQuickItem
. Por favor sugira...