Qt Quick开发(QML,CMake企业级实战项目)教程

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

一、1、特点(/s/1QIp8E_mpyEeGTRRgsVD4bQ 提取码: zd8b) Qt Quick是一个现代化的、基于QML的框架。 ● QML是Qt Quick的关键组成部分,是一种基于JavaScript的声明性语言,用于描述用户界面的视觉和行为。 ● Qt Quick Controls是一套预先设计好的用户界面元素库,包含了诸如按钮、文本框、菜单等常见的UI控件。这些控件可以被轻松地嵌入到QML界面中,并且能够很好地适应不同平台和设备。 ● Qt Quick可以用于多种平台,包括桌面、移动设备和嵌入式系统。 二、Qt Quick 基本元素 Qt Quick 作为 QML 的标准库,提供了很多基本元素和控件来帮助我们构建 Qt Quick 应用。如果拿 C++ 来比拟, QML 就相当于 C++ 语言本身,而 Qt Quick 相当于 STL 。好吧,你可能觉得有点驴头不对马嘴,没关系,有这么点儿意思就成。 Rectangle main.qml 的第三行代码,定义了一个 Rectangle 类型的对象作为 QML 文档的根对象。关于对象在 qml 文件中的描述,《Qt on Android:QML 语言基础》一文中已经讲解,这里不再赘述。下面咱们看看 Rectangle 到底是什么。 Rectangle 用来绘制一个填充矩形,可以带边框,也可以不带,可以使用纯色填充,也可以使用渐变色填充,甚至还可以不填充而只提供边框…… Rectangle 有很多属性。 width 用来指定宽, height 用来指定高,我们已经见识过了。 color 属性可以指定填充颜色,而 gradient 属性则用来设置渐变色供填充使用,如果你同时指定了 color 和 gradient ,那么 gradient 生效;如果你设置 color 属性为 transparent ,那么就可以达到只绘制边框不填充的效果。 border.width 指定边框的宽度, border.color 指定边框颜色。 Rectangle 还可以绘制圆角矩形,你只要设置 radius 属性就行了。 三、QML与QtQuick关系 “QML——Qt Meta Language” QML是一种声明式脚本语言,是QtQuick技术的核心与基础。 QML是一种规范和编程语言,可以用来描述一个程序的UI。 QML模块提供QML引擎和语言框架——负责解析qml脚本。 1、QML文档分为import 和declaration两部分。   import部分,指定该文档所需要引入的模块,通常是一个模块和版本号。也可以引入其他文件。 四、Qt Widgets 与 QML/Qt Quick Qt 4.7 发布时,引入了 QML,用于移动开发,其全面支持触摸操作、流畅的动画效果等。但在 Qt 5 中,QML 已经不再局限于移动开发,也可用于开发传统的桌面程序。 相比之下,Qt Widgets 更“老”、更成熟,而 QML/Qt Quick 则更“新”、更“现代”。 无论如何,Qt Widgets 和 QML/Qt Quick 都可以在多个平台上使用(Windows、Linux、OS X等) 对于传统的桌面程序来说,优先考虑使用 Qt Widgets,若要开发更“现代”的 UI 与高级应用,建议使用 Qt5.x + QML 2.x + QtQuick 2.x。 对于移动端开发来说,建议使用 QML,协同 JavaScript,简单快捷、渲染效果更佳、界面更炫酷。不建议使用 Qt Widgets,其显示效果、适应性都不好 五、QtQuick 1.x VS QtQuick 2.x 全新的 Qt 版本 QtQuick 1.x 基于 Qt4.x。 QtQuick 2.x 随 Qt5.0 一起引入。 全新的绘图系统 QtQuick 1.x 使用 QGraphicsView/QPainter API 来绘制场景。 QtQuick 2.x 基于 Scene Graph,一个 OpenGL(ES)2.0 抽象层,对绘图进行了高度优化,效率更高。 全新的 QML 引擎 Qt 4.x 中,QML 引擎基于JSC(JavaScriptCore - Webkit 的 JS 引擎)。 Qt 5.0 中引入 V8(Google 的开源高性能 JavaScript 引擎,用 C++ 编写,用于 Chromium、Node.js 和多个其他嵌入应用程序)。 Qt 5.2 中引入了 V4 JS 引擎,针对 QML 用例进行了优化,并且可以选择关闭 JIT(Just-In-Time)编译,以符合 iOS 和 WinRT 平台的限制。个头更小、反应更快、扩展性也非常好。 从 Qt 5.5 开始,加入了一个新模块 QtQuick3D,它提供使用 QML 语言创建 3D 应用程序/游戏的能力,其使用的是一个被命名为 FrameGraph 的新引擎,而非 Scene Graph(因为太 2D/2.4D)。 模块、属性和方法、类型和 API、C++ 代码(QtDeclarative 被移除了,替代的它是Qt QML 和 Qt Quick 模块)、QML 插件的更改 六、什么是QML? QML是一种用户界面规范和编程语言。它可以使开发人员和设计师创建出高性能、流畅动画和视觉吸引力的应用程序。QML提供了一种高度可读的、声明式的、类似JSON的语法,支持与动态属性绑定相结合的命令式JavaScript表达式。 QML语言和引擎基础设施由Qt QML模块提供。 七、什么是Qt Quick? Qt Quick是用于QML的标准类型和功能的库。它包括可视类型、交互类型、动画、模型和视图、粒子效果和着色器效果。通过一个导入语句,QML应用程序开发人员可以获得所有这些功能。 Qt Quick模块提供了QtQuick QML库。 八、只有qml没有quick可以开发吗 可以仅使用QML来开发应用程序,而不使用Qt Quick模块。 QML是一种用于描述用户界面的声明性语言,它可以独立于Qt Quick模块使用。 你可以在QML中创建自定义的界面组件、布局和逻辑,并且可以使用JavaScript来处理用户输入和实现应用程序的行为。 但是,使用Qt Quick模块可以为QML提供更多的预定义类型和功能,使开发过程更加简单和高效。 九、main.cpp 注意: Qt Quick 的mian函数有点区别,加载UI的方式不同,程序如下 #include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { /* 启用Qt应用程序的高DPI缩放功能 */ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); /* 创建一个Qt应用程序的实例 */ QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/main.qml")); /* 将 QQmlApplicationEngine 对象的 objectCreated 信号连接到一个 lambda 函数上 */ /* lambda 函数用于在 QML 文件中的根对象被创建时进行处理,检查对象是否成功创建,如果创建失败则退出应用程序 */ QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); /* 加载QML文件并显示用户界面 */ engine.load(url); return app.exec(); }

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

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

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