如何从 C++ 调用 QML 对象的方法
How to invoke method of QML object from C++
我有以下 QML 代码:
Rectangle {
id: mainRect
...
Rectangle{
id: listRect
...
ListModel {
id: idModel
... some stuff added
}
}
}
我想清除 idModel,使用 ListModel 的 clear 方法。
像这样的东西(在 QML 中)工作得很好:
idModel.clear()
但我想在 C++ 中实现相同的目标。
试过以下:
QQuickView view;
view.setSource(QUrl("qrc:/main.qml"));
QQuickItem* item = view.rootObject();
QObject* model = item->findChild<QObject*>("mainRect")->findChild<QObject*>("listRect")->findChild<QObject*>("idModel");
QMetaObject::invokeMethod(model,"clear");
还尝试搜索模型
QObject* model = item->findChild<QObject*>("idModel");
QObject* model = item->findChild<QObject*>("listRect")->findChild<QObject*>("idModel");
但是上面的这些东西不起作用......我什至无法理解 - 如果 C++ 中的 findChild 方法没有找到任何东西,或者 InvokeMethod 不起作用。
有人能给我解释一下吗?
使用 QT5.4\QtQuick 2.4
要使用 findChild()
,您应该将 objectName
设置为您的 qml 项目。
Rectangle {
id: mainRect
...
Rectangle{
id: listRect
...
ListModel {
id: idModel
objectName: "idModel"
... some stuff added
}
}
}
然后,您可以获得指向您的 ListModel 的指针
QObject* model = item->findChild<QObject*>("idModel");
要调用方法,您应该使用QMetaObject::invokeMethod()
QMetaObject::invokeMethod(model,"clear");
我有以下 QML 代码:
Rectangle {
id: mainRect
...
Rectangle{
id: listRect
...
ListModel {
id: idModel
... some stuff added
}
}
}
我想清除 idModel,使用 ListModel 的 clear 方法。 像这样的东西(在 QML 中)工作得很好:
idModel.clear()
但我想在 C++ 中实现相同的目标。 试过以下:
QQuickView view;
view.setSource(QUrl("qrc:/main.qml"));
QQuickItem* item = view.rootObject();
QObject* model = item->findChild<QObject*>("mainRect")->findChild<QObject*>("listRect")->findChild<QObject*>("idModel");
QMetaObject::invokeMethod(model,"clear");
还尝试搜索模型
QObject* model = item->findChild<QObject*>("idModel");
QObject* model = item->findChild<QObject*>("listRect")->findChild<QObject*>("idModel");
但是上面的这些东西不起作用......我什至无法理解 - 如果 C++ 中的 findChild 方法没有找到任何东西,或者 InvokeMethod 不起作用。
有人能给我解释一下吗? 使用 QT5.4\QtQuick 2.4
要使用 findChild()
,您应该将 objectName
设置为您的 qml 项目。
Rectangle {
id: mainRect
...
Rectangle{
id: listRect
...
ListModel {
id: idModel
objectName: "idModel"
... some stuff added
}
}
}
然后,您可以获得指向您的 ListModel 的指针
QObject* model = item->findChild<QObject*>("idModel");
要调用方法,您应该使用QMetaObject::invokeMethod()
QMetaObject::invokeMethod(model,"clear");