QML如何与C++交互
大家都知道,QML作为构建界面的语言是非常简洁的,但是界面的后台有些时候是经常要与C++交互的,那么这个时候,如何与C++进行交互就尤为重要了,在这里就需要用到
template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);这个模板函数,它是在QML系统中注册名为qmlName的C++类型文件
uri:这个参数类似于C++中的命名空间,如果不知道如何使用,没关系,下面的实例中会展示如何使用。
versionMajor:主版本号。
versionMinor:次版本号。
qmlName:C++文件在QML中的类名,需要注意的是这个类名首字母必须要大写,不然会报错。
接下来就看看如何操作的吧
.h
#ifndef QMLTYPE #define QMLTYPE #include <QObject> class QmlType:public QObject { Q_OBJECT public: QmlType(); Q_INVOKABLE QString ShowInfo(); }; #endif // QMLTYPE
.cpp
#include "qmltype.h" QmlType::QmlType() { } QString QmlType::ShowInfo() { return tr("Hello World"); }
需要注意的是如果函数想要在QML中被调用,那么此类必须继承于QObject,另外需要在函数的开头添加Q_INVOKABLE关键字。
接下来就是如何向QML中注册C++文件了。
#include <QApplication> #include <QQmlApplicationEngine> #include <QtQml> #include "qmltype.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); qmlRegisterType<QmlType>("com.type.QmlType", 1, 0, "Type"); QQmlApplicationEngine engine; QmlType qmlType; engine.rootContext()->setContextProperty("qmlType", &qmlType); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }
qml文件
import QtQuick 2.3
import QtQuick.Controls 1.2
import com.type.QmlType 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("测试")
Row{
spacing: 10
x:200
y:200
Button{
width: 100
height: 30
text: qsTr("点击")
onClicked: {
textName.text = qmlType.ShowInfo();
}
}
TextField{
width: 100
height: 30
id:textName
}
}
}
在QML中要把注册的url:com.type.QmlType导入进去,那么接下来接下来就可以正常操作C++文件了。操作演示如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?