从 qml 上下文访问 class 的实例

Accessing instances of a class from qml context

我是 QT 和 QML 的新手。我有一个 class,它实例化了 subclasses。我想通过一些 qml 绑定将这些子 classes 中的方法公开给我的 UI。

例如

class MainClass: QObject
{
   Q_OBJECT
   Subclass subclass;
   MainClass();

}

class Subclass:QObject
{
  Q_Object
  Subclass();

  public slots:
  void someMethod();
}

Main.C

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQuickView *view = new QQuickView; 
    MainClass mainclass;      
    view->rootContext()->setContextProperty("MainClass", &mainClass);
    view->setSource(QUrl("qrc:/main.qml"));
    view->show();
}

在这种情况下,我想从 QML UI 中访问 mainclass.subclass.someMethod()。

有什么好的方法吗?我是否应该在 MainClass 中为我想访问的每个 function/property 提供包装器方法。

SubClass 设为 MainClass 的 属性 是可能的。例如:

class MainClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(SubClass *subClass MEMBER subClass CONSTANT)

public:
    MainClass();

private:
    SubClass *subclass;
};

这些在 QML 中称为“grouped properties”。