在 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 版本。