好吧。我进行了很多搜索,但还没有找到好的解决方案。我是新来的Qt
。我有一堂课是QQuickItem
像这样,
class MyQuickItemClass : public QQuickItem
{
Q_OBJECT
SetInfo(SomeCppClass object)
};
I do a qmlRegisterType
in my main.cpp
将其注册到qml
侧面像这样
qmlRegisterType("MyQuickItemClass", 1, 0, "MyQuickItemClass");
到这里一切都很好。但是 -> 我想在 MyQuickItemClass 中设置一个对象实例和一些属性,其中还有一些 C++ 逻辑,然后传递MyQuickItemClass
反对qml
。或者,获取一个有效的实例MyQuickItemClass
来自 Qml。我怎样才能获得有效的实例MyQuickItemClass
对象实例来自QML
在 C++ 方面main.cpp
?
我尝试从链接中进行以下学习here。但这种技术创建了两个独立的对象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
。请建议...