好吧。我已经搜索了很多,但还没有一个好的解决方案。我是新手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. 或者,MyQuickItemClass从 Qml 获取一个有效的实例。如何从C++ 端获取 vlid 实例MyQuickItemClass对象实例?QMLmain.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设置的内部为空。因为 qml 已经对实例化MyQuickItemClass进行了最后调用,因此忽略了我在.MyQuickItemClassMyQuickItemClassmain.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. 请建议...