(YouTube)KDBA QML 学习笔记1

news/2024/9/8 5:14:24/

(YouTube)KDBA QML 学习笔记

旧版本(QML文件介绍)

main.qml

import 	QtQuick 2.0Text {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.15Window {width: 640height: 480visible: truetitle: 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);
#endifQGuiApplication 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.0SOURCES += \main.cppRESOURCES += 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.ppmy.cn/news/1001961.html

相关文章

Linux--gcc和g++的区别

在Linux上&#xff0c;gcc和g是两个不同的编译器命令&#xff0c;分别用于编译C和C代码。虽然它们都是GNU Compiler Collection&#xff08;GCC&#xff09;工具集的一部分&#xff0c;但在编译时有以下区别&#xff1a; 语言支持&#xff1a; gcc&#xff1a;用于编译C语言代码…

HTTP——五、与HTTP协作的Web服务器

HTTP 一、用单台虚拟主机实现多个域名二、通信数据转发程序 &#xff1a;代理、网关、隧道1、代理2、网关3、隧道 三、保存资源的缓存1、缓存的有效期限2、客户端的缓存 一台 Web 服务器可搭建多个独立域名的 Web 网站&#xff0c;也可作为通信路径上的中转服务器提升传输效率。…

【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用

【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用 一、QNX 侧:创建分区、配置下载、配置透传1.1 修改分区表,新增 android_test 分区,大小为 2GByte1.2 配置下载 android_test.img 镜像1.3 配置 /dev/disk/android_test_a 分区透传到 …

TSINGSEE青犀视频安防监控EasyCVR视频汇聚平台电子地图定位偏移的排查与解决

安防监控EasyCVR视频汇聚综合管理平台具有强大的数据接入、处理及分发能力&#xff0c;平台可提供视频监控直播、云端录像、云存储、录像检索与回看、告警上报与查询、平台级联、云台控制、语音对讲、电子地图、轨迹跟踪、H.265自动转码等视频能力。 在视频监控管理平台TSINGSE…

antd vue中遍历v-for中控制每个按钮的loading

项目中遇到一个需求&#xff0c;需要根据后台返回数据&#xff0c;遍历生成多个按钮&#xff0c;并点击出发事件。点击事件的时候需要该按钮loading状态。实现方法如下&#xff1a; <div class"center"><a-button v-for"(item,index) in btnItems&quo…

P1164 小A点菜

题目背景 uim 神犇拿到了 uoi 的 ra&#xff08;镭牌&#xff09;后&#xff0c;立刻拉着基友小 A 到了一家……餐馆&#xff0c;很低端的那种。 uim 指着墙上的价目表&#xff08;太低级了没有菜单&#xff09;&#xff0c;说&#xff1a;“随便点”。 题目描述 不过 uim …

大数据开发的前景怎么样?该怎么学习?

猎聘大数据研究院发布了《2022未来人才就业趋势报告》 从排名来看&#xff0c;2022年1-4月各行业中高端人才平均年薪来看&#xff0c;人工智能行业中高端人才平均年薪最高&#xff0c;为31.04万元&#xff1b;金融行业中高端人才以27.69万元的平均年薪位居第二&#xff1b;通信…

SAM在医学图像分割的一些研究(Segment Anything Model for Medical Images?(2023))

使用预训练模型通过两种主要模式进行分割&#xff0c;包括自动一切和手动提示(例如&#xff0c;点和框)。SAM在各种自然图像分割任务上取得了令人印象深刻的效果。然而&#xff0c;由于医学图像的形态复杂、解剖结构精细、物体边界不确定和复杂、物体尺度大&#xff0c;使得医学…

[Qt]FrameLessWindow实现调整大小

说明 我们知道QWidget等设置了this->setWindowFlags(Qt::FramelessWindowHint);后无法移动和调整大小&#xff0c;但实际项目中是需要窗口能够调整大小的。所以以实现FrameLess弹窗调整大小需求&#xff0c;以此类推&#xff0c;移动窗口也就很简单了&#xff08;这里没有实…

分布式框架dubbo

1.分布式系统相关概念 1.1基本概念 1.2 集群和分布式 1.3 架构演进 A是一个微服务。ADB是一个组件。A可以java&#xff0c;B可以python实现。 2 dubbo 2.1 概述 2.2 dubbo代码 2.2.1 服务提供者的改造-将项目service层对外发布到dubbo 通过dubbo中的service注解&#xff…

学无止境·运维高阶③(Mysqldump脚本)

Mysqldump脚本 1、详细脚本2、执行 1、详细脚本 #!/bin/bash mysql_cmd‘-uroot -pRedHat123’ exclude_db‘information_schema|performance_schema|sys’ bak_path/backup/db mysql m y s q l c m d − e ′ s h o w d a t a b a s e s ′ − N ∣ e g r e p − v " {m…

2023年08月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年08月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

Python——调用webdriver.Chrome() 报错

今天运行脚本&#xff0c;报错内容如下&#xff1a; collecting ... login_case.py:None (login_case.py) login_case.py:11: in <module> dr webdriver.Chrome() D:\Program Files (x86)\Python\Python39\Lib\site-packages\selenium\webdriver\chrome\webdriver.p…

MYSQL进阶-事务

什么是数据库事务&#xff1f; 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发控制的基本单位&#xff0c;其执 行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上 的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务最…

2023华数杯数学建模A题思路分析 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热…

小白如何获取CNVD事件型原创漏洞证明?——记CNVD漏洞挖掘思路

引子: 相信许多人都想要被别人叫做大佬&#xff0c;漏洞挖掘当中肯定也不例外,所以在此之前让我们康康度娘对大佬的定义:形容一个人很巨表示对其顶礼膜拜的态度。在这种情况下&#xff0c; 国家信息安全漏洞共享平台(CNVD) 则为我们提供了一个成为大佬的平台, CNVD作为国内最具…

负数的二进制转换成十进制

对于一个k位的二进制正数&#xff0c;其表示成十进制的结果是&#xff1a; pos[i]表示&#xff1a;这个正数的二进制形式的第i位是1。 i从最低位&#xff08;第0位&#xff09;开始&#xff0c;一直到k-1位。有符号数中&#xff0c;正数的第k-1为0&#xff0c;负数的第k-1位为…

uniapp 全局数据(globalData)的设置,获取,更改

globalData&#xff0c;这是一种简单的全局变量机制。这套机制在uni-app里也可以使用&#xff0c;并且全端通用 因为uniapp基本上都是将页面&#xff0c;或者页面中相同的部分&#xff0c;进行组件化&#xff0c;所以会存在父&#xff0c;子&#xff0c;&#xff08;子&#xf…

C# Blazor 学习笔记(7):组件嵌套开发

文章目录 前言相关资料组件嵌套组件模板RenderFragment 意义传统前端样式组件化css 前言 我们在组件化一共有三个目的。 不用写CSS不用写html不用写交互逻辑 简单来说就是Java常说的约定大于配置。我们只需要必须的参数即可&#xff0c;其它的都按照默认配置。我们不需要关系…

RL — 强化学习算法概述

一、说明 在本系列中&#xff0c;我们检查了许多强化学习&#xff08;RL&#xff09;算法&#xff0c;例如&#xff0c;MoJoCo任务的策略梯度方法&#xff0c;Atari游戏的DQN和机器人控制的基于模型的RL。虽然许多算法都是针对特定领域引入的&#xff0c;但这种联系只能是遗留的…