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