向QML公开复杂的Qt对象C++

Exposing complex C++ Qt object to QML

本文关键字:Qt 对象 C++ 复杂 QML      更新时间:2023-10-16

在一个C++文件中,我有一个类型为QList<QStringList>*的对象,它应该是一个二维字符串数组。

目前,在C++我能够做到这一点:

// this will display the QString value in the Console,
// where entries is of type QList<QStringList>*
qDebug() << "test: " << entries->at(0).at(0);

我知道如何将此对象公开给 QML,但是我将如何在 QML 中导航/访问其功能?

main.qml中,我可以调用返回此对象的函数:

_app.getCalendar()

但是我如何导航它,就像上面的C++代码一样?

编辑:我实际需要做的是将二维字符串数组从C++发送到QML。我这样做的方式是否过于复杂?有没有其他方法可以做到这一点?

在你向 QML 公开的类中定义一个 INVOKABLE getter 函数。

页眉:

class MyQmlClass : QObject
{
    Q_OBJECT
public:
    // ...
    Q_INVOKABLE QString getString(int y, int y);

    // ...
}

并在.cpp文件中实现它 广告如下:

QString MyQmlClass::getString(int x, int y)
{
    return entries->at(x).at(y);
}

最后在 QML 中:

_app.getCalendar().getString(3, 4)