栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Qml与C++交互1:C++调用Qml的接口

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Qml与C++交互1:C++调用Qml的接口

Qml与C++交互1:C++调用Qml的接口
    • 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));

3、代码
// 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”,获取资源链接。有任何疑问也可以公众号里留言咨询。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号