Qt - QML框架

文章目录

  • 1 . 前言
  • 2 . 框架生成
  • 3 . 框架解析
    • 3.1 qml.pro解析
    • 3.2 main.cpp解析
    • 3.3 main.qml解析
  • 4 . 总结


【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

  1. 什么是QML?
    QML是一种用户界面规范和编程语言。它允许开发人员和设计人员创建高性能、流畅的动画和具有视觉吸引力的应用程序。QML提供了高度可读的、声明式的、类似json的语法,支持命令式JavaScript表达式和动态属性绑定。QML语言和引擎基础结构是由Qt QML模块提供。QML是一种声明性语言,它允许根据用户界面的可视组件以及它们之间的交互和关系来描述用户界面。它是一种高度可读的语言,其设计目的是使组件能够以动态方式互连,并且允许在用户界面中轻松地重用和定制组件。使用QtQuick模块,设计人员和开发人员可以轻松地在QML中构建流畅的动画用户界面,并可以将这些用户界面连接到任何后端c++库。

  2. 什么是Qt Quick
    Qt Quick是QML类型和功能的标准库。它包括视觉类型,交互类型,动画,模型和视图,粒子效果和着色效果。QML应用程序开发人员可以通过一条import语句访问所有这些功能。QtQuick QML库由QtQuick模块提供。为了创建或定制图形用户界面,Qt Quick除了Qt QML中的标准QML类型外,还添加了可视类型、动画类型和其他QML类型。QtQuick Designer是集成在Qt Creator中的,并且在Qt Creator 2.7版本以后就支持QtQuick 2了。

2 . 框架生成

  1. 第一步创建项目选择Qt Quick Application
    在这里插入图片描述
  2. 第二步选择Qt对应版本编译
    在这里插入图片描述
  3. 第三步生成出来的界面如下,运行后可看到窗口程序
    在这里插入图片描述

3 . 框架解析

qml框架生成后,除了 main.cpp文件项目配置文件 还附带了 main.qml文件 ,其中三个文件的内容分别如下所示 :

1 . qml.pro

QT += quickSOURCES += \main.cppresources.files = main.qml 
resources.prefix = /$${TARGET}
RESOURCES += resources# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

2 . main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;const QUrl url(u"qrc:/qml/main.qml"_qs);QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,&app, [url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);return app.exec();
}

3 . main.qml

import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")
}

3.1 qml.pro解析

  1. QT += quick
    解析 : Qt框架添加Qml Quick模块

  2. SOURCES += main.cpp
    解析 : Qt框架编译源文件包含main.cpp文件

  3. resources.files = main.qml
    resources.prefix = /$${TARGET}
    RESOURCES += resources
    解析 : Qt框架编译Qml文件及资源包含main.qml

  4. QML_IMPORT_PATH =
    解析 : Qt框架引入Qml模块路径

  5. QML_DESIGNER_IMPORT_PATH =
    解析 : Qt框架引入Qml设计模块路径

  6. qnx: target.path = /tmp/$ ${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    解析 : Qt框架Qml默认环境配置

3.2 main.cpp解析

  1. #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    解析 : 引入Qt应用引擎

  2. int main(int argc, char *argv[])
    解析 : 程序入口,参数列表为参数个数以及具体参数内容

  3. QGuiApplication app(argc, argv);
    解析 : 创建Qml对象

  4. QQmlApplicationEngine engine;
    解析 : 创建Qml引擎

  5. const QUrl url(u"qrc:/qml/main.qml"_qs);
    解析 : 定义Qml文件url路径

  6. QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
    &app, [url](QObject *obj, const QUrl &objUrl) {
    if (!obj && url == objUrl)
    QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    解析 : 这里是信号槽连接,当Qml引擎创建后,语法为Lambda 表达式,引入qml对象与qml url路径,路径为上述Qml文件url路径 ,当对象指针不为空并且路径正确则继续执行,否则Qml环境启动失败,信号槽第五个参数这里指定Qt::QueuedConnection);是因为这两个线程不一致,基于信号槽可多线程的特性,这里的信号槽设为多线程交互。

  7. engine.load(url);
    解析 : Qml引擎加载文件路径

  8. return app.exec();
    解析 : app.exec();此函数为Qt框架正式启动事件循环,当事件循环结束,此程序结束并返回相应执行结果给系统

3.3 main.qml解析

  1. import QtQuick
    解析 : 引入QtQuick模块

  2. Window {
    width: 640
    height: 480
    visible: true
    title: qsTr(“Hello World”)
    }
    解析 : 创建一个Window窗口对象,这个窗口宽640,高480,单位为像素,窗口设为可见,窗口标题为Hello World

4 . 总结

Qml通过main.qml,main.cpp把应用前后端分离,类似 MVVM 架构,从而使得框架清晰,并且Qt框架在力推Qml,至此,后续应用Qml将会越来越好用,性能越来越强,习惯Qml后就不需要在QWidget中编写前端内容,谢谢观看。

技术交流QQ群 : 745662457
群内专注 - 问题答疑,项目外包,技术研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333654.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锂电池制造设备中分布式IO模块优势

在“碳达峰、碳中和”目标推动下&#xff0c;新能源汽车当下发展势头正盛&#xff0c;而纯电动车的核心部件则是&#xff1a;锂电池。动力型锂电池作为新能源汽车核心零部件&#xff0c;其发展与新能源汽车行业息息相关&#xff0c;迎来广阔的市场空间。 为何采用I/O模块&#…

Arduino开发实例-X9C103S数字电位器驱动

X9C103S数字电位器驱动 文章目录 X9C103S数字电位器驱动X9C103S介绍2、硬件准备及接线3、代码实现X9C103S介绍 X9C103S 10k 数字电位器模块是一个可变电阻器,其阻值可以通过微控制器进行数字化改变。 它包含一个 3 针输出,可替代具有 3 针的机械电位器。 该模块有 99 个电阻…

【开源GPT项目 - 在问】让知识无界,智能触手可及

Chatanywhere: chatAnywhere 在问 | 让知识无界&#xff0c;智能触手可及 项目简介 这是一个免费的在线聊天工具&#xff0c;旨在让用户更方便地享受科技带来的便利。用户可以使用我们的工具来获取答案、寻求建议、进行翻译和计算等等。这是由一位个人开发者创建的&#xff…

山西电力市场日前价格预测【2024-01-10】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-10&#xff09;山西电力市场全天平均日前电价为234.34元/MWh。其中&#xff0c;最高日前电价为376.19元/MWh&#xff0c;预计出现在00:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

校招行测,认知能力测验,④破解数量关系测试题

数量关系&#xff0c;值得是数量计算、对比和分析&#xff0c;每种题型都有一定的规律性&#xff0c;如果善于终结也是容易掌握的&#xff0c;当然&#xff0c;只有见多&#xff0c;才能识广&#xff0c;最好的方式就是&#xff0c;锻炼&#xff0c;刷题&#xff0c;就算是临时…

“25天物理探索旅程”提纲

文章目录 第一部分&#xff1a;物理学基础&#xff08;第1-5天&#xff09;第一天&#xff1a;物理世界的探秘之旅第二天&#xff1a;力学基石的构筑第三天&#xff1a;相对论时空观的构建第四天&#xff1a;光的奇妙旅程揭秘第五天&#xff1a;热力学世界的大门开启 第二部分&…

畸变矫正-深度学习相关论文学习

目录 DocTr: Document Image Transformer for Geometric Unwarping and Illumination Correction SimFIR: A Simple Framework for Fisheye Image Rectification with Self-supervised Representation Learning Model-Free Distortion Rectification Framework Bridged by Di…

伦茨Lenze驱动器维修EVS9324-ES D-31855

Lenze伦茨驱动器常见故障修理&#xff1a; 伦茨伺服驱动器维修&#xff0c;主电路上电检修注意事项&#xff1a;逆变模块与驱动电路在故障上有关联性。当逆变模块炸裂损坏后&#xff0c;驱动电路势必受到冲击而损坏&#xff1b;逆变模块损坏也可能正是因驱动电路的故障而造成的…

工业自动化中RFID标签的应用案例

RFID标签是实现RFID数据采集的重要载体&#xff0c;利用RFID标签&#xff0c;可以将所有产品的信息写入标签中&#xff0c;大部分的RFID标签都以不干胶标签的形式使用&#xff0c;只需要在物品包装上贴RFID标签就可以。下面我们就一起来了解一下&#xff0c;工业自动化中RFID标…

sublime如何一个窗口打开多个文件

sublime如何一个窗口打开多个文件 设置如下 设置如下 首选项–设置 添加代码,注意位置, 不要添加到后面 "open_files_in_new_window":false,————————————————————— 以上就是今日博客的全部内容了 创作不易,若对您有帮助,可否点赞、关注一二呢…

分享几个网盘资源搜索地址,总能找到你想要的

目录 [TOC](目录)一、前言二、地址分享三、结尾 一、前言 分享几个网盘搜索网站&#xff0c;总能找到你想要的。 二、地址分享 盘搜搜: https://pansoso.com/ 搜网盘: https://www.swangpan.com/ fastsoso: https://www.fastsoso.cc 猫狸盘搜: https://www.alipansou.com…

如何寻找到相对完整的真正的游戏的源码 用来学习?

在游戏开发的学习之路上&#xff0c;理论与实践是并重的两个方面。对于许多热衷于游戏开发的学习者来说&#xff0c;能够接触到真实的、完整的游戏源码无疑是一个极好的学习机会。但问题来了&#xff1a;我们该如何寻找到这些珍贵的资源呢&#xff1f; 开源游戏项目 GitHub:地…