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