我有以下QML代码:
Rectangle {
id: mainRect
...
Rectangle{
id: listRect
...
ListModel {
id: idModel
... some stuff added
}
}
}
我想使用ListModel的clear方法清除idModel。 像这样的东西(在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
答案 0 :(得分:3)
要使用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");