- 1、QML接口
- 2、C++调用
- 3、代码
- 4、运行结果
总体思路:qml中添加一个js函数,C++ Qt中可以使用QMetaObject::invokeMethod 来调用Js函数。
1、QML接口- 给控件定义一个objectName
- 实现一个js函数
Text {
objectName: "textLabel"; // 控件定义一个objectName
text: "Hello World";
font.pixelSize: 26;
Layout.leftMargin: 10
// js函数
function getText() {
return text;
}
}
2、C++调用
-
通过qml引擎找到根节点
auto root = engine.rootObjects();
rootObjects声明如下,其作用是:返回由QQmlApplicationEngine实例化的所有根对象的列表。
QList
QQmlApplicationEngine::rootObjects() const -
通过qml控件的objectName 来找到对应控件的C++对象
QObject* textLable = root.first()->findChild
("textLabel"); root.first(),由于我们这个引擎只有一个根对象,所以拿到第一个根对象进行查找子节点的操作。
findChild
("textLabel"),声明如下,是一个模板函数,其作用是返回该对象名称为name的子对象,该子对象可以被强制转换为T类型,如果没有这样的对象,则返回nullptr template
T QObject::findChild( const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const -
使用QMetaObject::invokeMethod 来调用Js函数。
QMetaObject::invokeMethod(textLable, "getText", Q_RETURN_ARG(QVariant, ret));
// cpp调用qml接口、数据 auto root = engine.rootObjects(); QObject* textLable = root.first()->findChild("textLabel"); QVariant ret; QMetaObject::invokeMethod(textLable, "getText", Q_RETURN_ARG(QVariant, ret)); qDebug()<<"ret: "< 4、运行结果 ret: QVariant(QString, "Hello World")
完整实现可以微信搜索公众号:“上官宏竹”,或者扫下面的二维码,关注并回复:“qml_1”,获取资源链接。有任何疑问也可以公众号里留言咨询。



