在 QML 中调用 C.

在 QML 中注册 C++类

在 C++方面,假设我们有一个名为 QmlCppBridge 的类,它实现了一个名为 printHello() 的方法。

class QmlCppBridge : public QObject
{
    Q_OBJECT
public:
    Q_INVOKABLE static void printHello() {
        qDebug() << "Hello, QML!";
    }
};

我们想在 QML 方面使用它。我们应该通过调用 qmlRegisterType() 来注册类:

// Register C++ class as a QML module, 1 & 0 are the major and minor version of the QML module
qmlRegisterType<QmlCppBridge>("QmlCppBridge", 1, 0, "QmlCppBridge");

在 QML 中,使用以下代码来调用它:

import QmlCppBridge 1.0    // Import this module, so we can use it in our QML script

QmlCppBridge {
    id: bridge
}
bridge.printHello();

使用 QQmlContext 将 C++类或变量注入 QML

我们仍然在前面的例子中使用 C++类:

QQmlApplicationEngine engine;
QQmlContext *context = engine.rootContext();

// Inject C++ class to QML
context->setContextProperty(QStringLiteral("qmlCppBridge"), new QmlCppBridge(&engine));

// Inject C++ variable to QML
QString demoStr = QStringLiteral("demo");
context->setContextProperty(QStringLiteral("demoStr"), demoStr);

在 QML 方面:

qmlCppBridge.printHello();    // Call to C++ function
str: demoStr                  // Fetch value of C++ variable

注意: 此示例基于 Qt 5.7。不确定它是否适合早期的 Qt 版本。