C++ Qt6 QML入门进阶与项目实战视频课程

kuaidelasi · · 178 次点击 · 开始浏览    置顶

/s/1tEVgmwGCV5HvrSWNxQrtHA 提取码: e7ux 前言: QML和 C++对象可以通过,signals,slots和 属性修改进行交互。对于一个C++对象,任何数据都可以通过Qt的 Meta-Object System暴露给QML(何总方法,后面介绍),同时,任何的QML对象数据通过Meta-object system在C++端直接访问。 在实际的项目中很多地方会用到QML与Qt C++交互。在这里总结了若干方法供大家参考,欢迎大家指导和拍砖。 在这里不外乎有三种方法: 1. 把Qt C++中的对象或类型暴露给 QML端,供QML端使用。(官方说法是“嵌入”而非“暴露”,比较文明。- -b) 2. QML中的Signal Handler(相当于Qt C++发送信号给QML端,QML端的Signal Handler进行处理)。 3. 在Qt C++端创建QML对象,既然对象都有了。那你想怎么样它就怎么样它呗。 一、QML与C++为什么要混合编程 QML与C++为什么要混合编程,简单来说,就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法,下面介绍了两者间交互的方法与技巧。 二、QML访问C++概述 Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号、槽函数、枚举类型、属性、成员函数等。 QML访问C++有两个方法:一是在Qt元对象系统中注册C++类,在QML中实例化、访问。二是在C++中实例化并设置为QML上下文属性,在QML中直接使用。与后者相比,前者可以使C++类在QML中作为一个数据类型,例如函数参数类型或属性类型,也可以使用其枚举类型、单例等,功能更强大。 三、C++在Qt中的核心地位 C++是一种成熟且功能强大的编程语言,它在Qt中扮演着核心的角色。C++的优势在于: 性能: C++提供了接近硬件层面的控制能力,使得应用程序能够实现高性能。 复杂性处理: C++的面向对象特性使其能够处理复杂的业务逻辑和算法。 稳定性: 作为一种广泛使用的编程语言,C++拥有稳定的编译器和大量的库支持。 四、C++与QML的协同工作 在实际开发中,C++和QML并不是孤立的,它们通过Qt的信号和槽机制相互通信和协作。这种协同工作模式允许开发者利用C++的强大性能和QML的灵活性,共同构建高效且用户友好的应用程序。 数据模型: C++可以定义和处理复杂的数据模型,而QML则可以展示这些数据。 逻辑分离: C++负责处理业务逻辑,而QML负责界面展示,实现了逻辑与界面的分离。 性能优化: C++可以处理性能敏感的任务,而QML则专注于提供流畅的用户体验。 五、如何实现可以被QML访问的C++类 C++类要想被QML访问,首先必须满足两个条件:一是派生自QObject类或QObject类的子类,二是使用Q_OBJECT宏。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。Q_OBJECT宏必须在private区(C++默认为private)声明,用来声明信号与槽,使用Qt元对象系统提供的内容,位置一般在语句块首行。下面例子在QtCreator3.1.2中创建,Projects选择QtQuickApplication,工程名为Gemini,Component选择QtQuick2.2,然后在自动生成的文件中添砖加瓦。 六、在qml文件中输入相应的元素(Item,Rectanger,Image,Canvas等等)。 import QtQuick 2.0 import QtQuick.Window 2.2 Window { width: 800 height: 600 visible: true title: "Test window" } 在main函数中加载qml引擎需要用到QQmlApplicationEngine类,通过该类加载qml文件。如下: int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/Test.qml"))); 7 return app.exec(); } 其中,engine 对象的 load() 方法,需要一个QUrl对象提供qml文件的url路径,这里加载了一个qml文件,即“Test.qml”文件。 运行之后得到空白的窗体。如果想要显示不同的内容,需要在qml文件中添加相应的元素或自己编写控件再添加。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

178 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传