如何从 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");