(YouTube)KDBA QML 学习笔记1

news2024/11/17 9:35:08

(YouTube)KDBA QML 学习笔记

旧版本(QML文件介绍)

main.qml

import 	QtQuick 2.0

Text {
	text: "Hell World"
}

main.cpp

#include <QtQuick>

int mian(int argc, char *argn[])
{
    QGuiApplication app(argc, argv);//QT开始    
    QQuickview view;   //创建实际显示屏幕上的部分。
    view.setSource(QUrl("main.qml"));//QML到Qt的最后一部分,加载QMl文件
    view.show(); //进行显示
    return app.exec;   //QML层,相当于while循环,判断各事件
}
5-9-6-8-7视频中的讲解顺序

业务逻辑在C++中是下降的,用户界面采用QML格式。

最新版本Qt6.5.1(QML文件介绍)

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
}

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>


int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    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();
}

这是一个使用C++编写的Qt Quick应用程序的main.cpp文件,它使用QML来创建用户界面。我们逐步解释代码:

  1. #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    这是一个预处理指令,检查使用的Qt版本是否小于6.0.0。如果条件成立,将执行该块内的代码。

  2. QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    setAttribute函数用于启用高DPI缩放功能。高DPI缩放是一种功能,可以让应用程序在高分辨率显示器上正确缩放其用户界面。

  3. QGuiApplication app(argc, argv);
    这行代码创建一个QGuiApplication对象,它是Qt Quick应用程序的入口点。

  4. QQmlApplicationEngine engine;
    这行代码创建一个QQmlApplicationEngine对象,负责加载和运行基于QML的用户界面。

  5. const QUrl url(QStringLiteral("qrc:/main.qml"));
    这行代码定义了一个常量变量url,表示将要加载到应用程序用户界面的QML文件的路径。在这里,它从资源系统中加载名为"main.qml"的QML文件("qrc:/"表示资源文件)。

  6. QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { ... });
    这行代码将一个Lambda函数与QQmlApplicationEngineobjectCreated信号连接起来。objectCreated信号在QML引擎创建根QML对象时发射。在这里,当QML对象被创建时,将调用Lambda函数。

  7. if (!obj && url == objUrl) QCoreApplication::exit(-1);
    在Lambda函数中,它检查创建的对象(obj)是否为nullptr,以及创建对象的URL(objUrl)是否与之前定义的QML文件的URL(url)相同。如果条件成立,应用程序将以状态码-1退出,表示发生错误。

  8. engine.load(url);
    这行代码将之前定义的QML文件的URL(url)加载到QQmlApplicationEngine中。QML文件将由引擎处理和运行,其用户界面将被显示。

  9. return app.exec();
    最后,app.exec()函数启动应用程序的事件循环,使应用程序保持运行并处理事件,直到退出。

因此,这个main.cpp文件设置了必要的配置和对象,用于运行一个带有基于QML的用户界面的Qt Quick应用程序,并且启动了应用程序的事件循环。如果Qt版本小于6.0.0,则会启用高DPI缩放,并且加载名为"main.qml"的主要QML文件。

.pro文件

QT += quick

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

RESOURCES += qml.qrc

# 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

这是一个Qt Quick应用程序的项目文件(通常命名为.pro文件),用于描述项目的配置和构建规则。让我们逐一解释这个文件的内容:

  1. QT += quick
    这一行指定了项目所使用的Qt模块。在这里,使用了quick模块,该模块用于支持Qt Quick框架,用于创建快速的动态用户界面。

  2. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
    这行代码是被注释掉的。如果取消注释,它将定义一个预处理器宏QT_DISABLE_DEPRECATED_BEFORE,并设置其值为0x060000。这个宏的目的是禁用在Qt 6.0.0之前被弃用的API,从而让使用已弃用API的代码在编译时失败。

  3. SOURCES += \ main.cpp
    这行代码指定项目中的C++源代码文件为main.cpp。在这里,main.cpp是主要的C++源文件,其中包含了应用程序的入口点和主要逻辑。

  4. RESOURCES += qml.qrc
    这行代码指定了资源文件.qrc。在Qt中,资源文件是用来将资源(如图像、样式表、QML文件等)打包到应用程序中的文件。在这里,qml.qrc是一个资源文件,它包含了一个或多个QML文件。

  5. QML_IMPORT_PATH =
    这行代码设置了一个额外的导入路径,用于在Qt Creator的代码模型中解析QML模块。这里没有指定具体的路径,所以当前项目的目录将被用作导入路径。

  6. QML_DESIGNER_IMPORT_PATH =
    这行代码设置了额外的导入路径,用于仅在Qt Quick Designer中解析QML模块。同样,没有指定具体的路径,所以当前项目的目录将被用作导入路径。

  7. qnx: target.path = /tmp/$${TARGET}/bin
    这行代码用于在QNX平台上设置安装路径。如果目标平台是QNX,它将设置target.path/tmp/目标名称/bin

  8. else: unix:!android: target.path = /opt/$${TARGET}/bin
    这行代码用于在其他Unix平台上设置安装路径。如果目标平台是其他Unix平台(不包括Android),它将设置target.path/opt/目标名称/bin

  9. !isEmpty(target.path): INSTALLS += target
    这行代码将根据之前设置的target.path的值,将目标文件安装到指定的路径中。

这个.pro文件告诉Qt构建系统如何编译和构建Qt Quick应用程序,并指定了应用程序的源代码文件、资源文件以及安装路径等相关配置。

QML历史

image-20230802110713393

Qt架构

image-20230802111418263

o`文件告诉Qt构建系统如何编译和构建Qt Quick应用程序,并指定了应用程序的源代码文件、资源文件以及安装路径等相关配置。

QML历史

[外链图片转存中…(img-J9pfEZhm-1690971483722)]

Qt架构

[外链图片转存中…(img-yiosQFi7-1690971483722)]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

maven下载安装及初次使用相关配置

maven下载按照及初次使用相关配置 一、下载 与安装 下载完解压放在文件夹中即可&#xff01; 依赖Java&#xff0c;需要配置JAVA_HOME设置MAVEN自身的运行环境&#xff0c;需要配置MAVEN_HOME&#xff08;参考安装java&#xff09;测试环境配置结果 MVN测试成功&#xff01…

大牛练成记:用JavaScript徒手写出一个日期选择插件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;100个JavaScript的小应用。 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收…

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外&#xff0c;最近的研究成果还结合了文本模式来提高性能。添加文本模态后&#xff0c;通用检测算法的一些非常好的属性开始出现&#xff0c;例如&#xff1a; 可以利用大量…

【多线程系列-04】深入理解java中线程间的通信机制

多线程系列整体栏目 内容链接地址【一】深入理解进程、线程和CPU之间的关系https://blog.csdn.net/zhenghuishengq/article/details/131714191【二】java创建线程的方式到底有几种&#xff1f;(详解)https://blog.csdn.net/zhenghuishengq/article/details/127968166【三】深入…

如何通过 5 步激活策略扩大用户群

假设&#xff0c;你现在是一个“深藏功与名”的增长黑客。前期你表现非常好&#xff0c;做了一些拉新实验&#xff0c;每天都有上千用户进入到产品。团队成员和家人朋友都非常开心你们的产品增长终于有了起色。 然而&#xff0c;如果你不重视拉新&#xff08;acquisition&…

TI的IWR6843跑3D People Tracking(3D人体检测追踪实验)demo的上手教程

1.硬件准备 1.IWR6843板子 2.两个USB转串口模块&#xff08;因为我的是自己做的板子&#xff0c;板子上没有集成USB转串口芯片&#xff09; 2.软件准备 1.最新版本的CCS&#xff0c;注意后缀没有THEIA https://www.ti.com/tool/CCSTUDIO?DCMPdsp_ccs_v4&HQSccs 2.最新…

速通pytorch库

速通pytorch库&#xff08;长文&#xff09; 前言 ​ 本篇文章主要为那些对于pytorch库不熟悉、还没有上手的朋友们准备&#xff0c;梳理pytorch库的主要内容&#xff0c;帮助大家入门深度学习最重要的库之一。 目录结构 文章目录 速通pytorch库&#xff08;长文&#xff09;1.…

13 springboot项目——准备数据和dao类

13.1 静态资源下载 https://download.csdn.net/download/no996yes885/88151513 13.2 静态资源位置 css样式文件放在static的css目录下&#xff1b;static的img下放图片&#xff1b;template目录下放其余的html文件。 13.3 创建两个实体类 导入依赖&#xff1a;lombok <!…

35岁后的测试工程师出路?测试工程师能干多久?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 你有没有一刹那意…

服务器硬件、部署LNMP动态网站、部署wordpress、配置web与数据库服务分离、配置额外的web服务器

day01 day01项目实战目标单机安装基于LNMP结构的WordPress网站基本环境准备配置nginx配置数据库服务部署wordpressweb与数据库服务分离准备数据库服务器迁移数据库配置额外的web服务器 项目实战目标 主机名IP地址client01192.168.88.10/24web1192.168.88.11/24web2192.168.88…

产业大数据应用:精准剖析区域产业,摸家底 明方向 促发展

随着信息技术的飞速发展&#xff0c;大数据和新一代信息技术的崛起&#xff0c;这些技术的应用正在逐渐渗透到各个领域&#xff0c;在区域产业发展上&#xff0c;他们不仅为区域产业诊断分析带来了高效的工具&#xff0c;更为区域制定产业发展战略和政策提供了有效的数据支撑。…

活动预告 | 中国数据库联盟(ACDU)中国行第二站定档杭州,邀您探讨数据库技术与实践!

数据库技术一直是信息时代中不可或缺的核心组成部分&#xff0c;随着信息量的爆炸式增长和数据的多样化&#xff0c;其重要性愈发凸显。作为中国数据库联盟&#xff08;ACDU&#xff09;的品牌活动之一&#xff0c;【ACDU 中国行】在线下汇集数据库领域的行业知名人士&#xff…

Keil出现Flash Timeout.Reset the Target and try it again.我有一种解决方法

2.解决方法 网上查找了找原因&#xff0c;是因为之前代码设置了读保护功能。 读保护即大家通常说的“加密”&#xff0c;是作用于整个Flash存储区域。一旦设置了Flash的读保护&#xff0c;内置的Flash存储区只能通过程序的正常执行才能读出&#xff0c;而不能通过下述任何一种…

echarts绘制关系图

效果图&#xff1a; 代码&#xff1a; <template><div id"serveGraph" style"height: 100%; width: 100%; z-index: 88;"></div> </template> <script> import { defineComponent,reactive,toRefs,onMounted,watch } from …

网络工程师 快速入门

需要掌握 以下技术 1.网络 基础 知识 TCP/IP 、OSI 7层协议、IP地址、ARP地址解析协议、ICMP&#xff08;英特网控制报文协议&#xff0c;ping&#xff09;等 入门面试常问问题。 2.路由 路由匹配 三原则、静态路由、OSPF路由协议。 2.交换 如何放数据&#xff1f; VLAN TRU…

【Spring】bean的生命周期

1.具体的生命周期过程 bean对象创建&#xff08;调用无参构造器&#xff09; 给bean对象设置属性 bean对象初始化之前操作&#xff08;由bean的后置处理器负责&#xff09; bean对象初始化&#xff08;需在配置bean时指定初始化方法&#xff09; bean对象初始化之后操作&am…

C# Blazor 学习笔记(0.1):如何开始Blazor和vs基本设置

文章目录 前言资源推荐环境如何开始Blazor个人推荐设置注释快捷键热重载设置 前言 Blazor简单来说就是微软提供的.NET 前端框架。使用 WebAssembly的“云浏览器”&#xff0c;集成了Vue,React,Angular等知名前端框架的特点。 资源推荐 微软官方文档 Blazor入门基础视频合集 …

Arcgis地图实战一:单个图层中设施的隐藏及显示

文章目录 1.效果图预览2.弹框的实现3.显示及隐藏的实现 1.效果图预览 2.弹框的实现 let alert this.alertCtrl.create();alert.setTitle(请选择设施);for (let item of this.ctralllayers) {alert.addInput({type: checkbox,label: item.name,value: item.id,checked: item.vi…

音量压低处理流程

开始 通过申请临时DUCK焦点可以压低其他在播放的音源&#xff0c;如源码中的注释&#xff0c;不会暂停其他在播放的音源&#xff0c;而是降低输出&#xff0c;在车载情景下&#xff0c;一般在地图导航或者语音播报的情景下会申请这个焦点。 // AudioManager.java /*** Used t…

Netty自定义消息协议的实现逻辑处理粘包拆包、心跳机制

Netty 自定义消息协议的实现逻辑自定义编码器 心跳机制实现客户端发送心跳包 自定义消息协议的实现逻辑 消息协议&#xff1a;这一次消息需要包含两个部分&#xff0c;即消息长度和消息内容本身。 自定义消息编码器︰消息编码器将客户端发送的消息转换成遵守消息协议的消息&…