(YouTube)KDBA QML 学习笔记1

(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.mzph.cn/news/20726.shtml

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

相关文章

【力扣】 12. 整数转罗马数字 模拟

力扣 12. 整数转罗马数字 解题思路 当某个位数的某个数不为4或9时&#xff0c;高位对应的字符总是在低位对应的字符前面。只有当该数为4或9时&#xff0c;低位对应的字符在高位前面。 根据这一特性&#xff0c;我们进行分类讨论。 1.当数为4时&#xff0c;则对应的罗马数为 10 …

一文带你了解TCP/IP模型以及封装和分用

文章目录 1. 网络协议2. OSI七层网络模型3.TCP/IP (五层/四层)4. 封装和分用 1. 网络协议 网络协议是计算机网络中用于规定数据在网络中传输和处理的规则&#xff0c;它定义了在网络中通信的格式、规范和顺序。网络协议可以分为不同的层次&#xff0c;每个层次负责不同的功能和…

Python模块psycopg2连接postgresql

目录 1. 基础语法 2. 基础用法 3. 多条SQL 4. 事务SQL 1. 基础语法 语法 psycopg2.connect(dsn #指定连接参数。可以使用参数形式或 DSN 形式指定。host #指定连接数据库的主机名。dbname #指定数据库名。user #指定连接数据库使用的用户名。…

Matlab实现Kmeans++算法(每行代码标注详细注解)

逐行代码讲解Kmeans算法的原理及其实现&#xff0c;后续将更新该算法的进一步优化的代码的讲解 目录 一、什么是Kmeans算法 二、Kmeans算法原理 三、Kmeans算法代码解析 四、总结 一、什么是Kmeans算法 K-means算法的优点是简单易实现&#xff0c;计算效率高&#xff0c;适…

寄存器详解(一)

目录 前言&#xff1a; 通用寄存器 示例&#xff1a; 通用寄存器的划分 汇编指令 cpu物理地址的形成 地址加法器运算示例&#xff1a; 1. 相关部件提供段地址和偏移地址 2. 段地址和偏移地址送入地址加法器 3. 段地址*16 4. 求出物理地址 5. 输出物理地址 段的概念 Deb…

[C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...

之前的两篇文章: 第一篇文章介绍了本项目的背景, 获取了Boost库文档 &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…第二篇文章 分析实现了parser模块. 此模块的作用是 对所有文档html文件, 进行清理并汇总 &#x1fae6;[C项目] …

309. 买卖股票的最佳时机含冷冻期

给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖出股票后&#xff0c;你无法在第二天买入股票 …

牛客网Verilog刷题——VL56

牛客网Verilog刷题——VL56 题目答案 题目 实现4bit无符号数流水线乘法器设计。电路的接口如下图所示&#xff1a; 输入输出描述&#xff1a; 信号类型输入/输出位宽描述clkwireInput1系统时钟信号rst_nwireInput1异步复位信号&#xff0c;低电平有效mul_awireInputsize乘数mu…

Selenium Chrome Webdriver 如何获取 Youtube 悬停文本

导语 Youtube 是一个非常流行的视频分享平台&#xff0c;有时候我们可能想要爬取一些视频的信息&#xff0c;比如标题、播放量、点赞数等。但是有些信息并不是直接显示在网页上的&#xff0c;而是需要我们将鼠标悬停在某个元素上才能看到&#xff0c;比如视频的时长、上传时间…

自动化测试学习方向

1. 首先要搞明白几个问题 本来想写一些东西&#xff0c;但忽然发现虫师已经对这个问题总结很到位了&#xff0c;所以我也就不想多说什么&#xff0c;放上链接&#xff0c;学自动化测试之前&#xff0c;先去看看吧 在做自动化测试之前你需要知道的 2. 语言基础 很多想学自动化…

NGZORRO:动态表单/模型驱动 的相关问题

官网的demo的[nzFor]"control.controlInstance"&#xff0c;似乎是靠[formControlName]"control.controlInstance"来关联的。 <form nz-form [formGroup]"validateForm" (ngSubmit)"submitForm()"><nz-form-item *ngFor&quo…

ThinkPHP v6.0.8 CacheStore 反序列化漏洞

漏洞说明 1. 漏洞原理&#xff1a;ThinkPHP 6.0.8 CacheStore 会触发POP利用链子&#xff0c;造成任意命令执行 2. 组件描述&#xff1a; ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架 3. 影响版本&#xff1a;V6.0.8 漏洞复现 1. 环境安…

Docker实践:使用Docker搭建个人开发环境(极简版)

文章目录 说明教程1. 编写 Dockerfile2. 编写 docker-compose.yml3. 使用容器创建容器启动容器进入容器命令行VSCode 4. 关闭容器5. 备份容器导出导入 6. 重置容器 相关资料文章合集详细了解本文在个人电脑上安装 Docker容器使用 NVIDIA 显卡托管镜像运行GUI程序 说明 本文是在…

git删除已经提交的大文件

当你不小心把一个巨大的二进制文件提交到git仓库的时候&#xff0c;此时删除再提交也没有用了&#xff0c;大文件已经在仓库中留底了。另外比如需要删除某个需要保密的文件&#xff0c;都是相同的解决办法。 我本来想着把dll放在三方库里面提交到仓库里&#xff0c;省得在不同…

3.playbook剧本二

文章目录 playbook二Roles模块roles模式安装LNMP创建nginxfiles目录handlers目录tasks目录templates目录vars目录 创建mysqltasks目录 创建phpfiles目录handlers目录tasks目录templates目录vars目录 创建LNMP剧本文件 playbook二 Roles模块 角色的作用&#xff1a;把playbook…

安全渗透知识总结二

目录 一、html实体编码 1、Unicode字符编码 2、字符的数字表示 3、常见实体编码 4、url 协议 主机 http状态码 http常用的状态码 端口 常见协议端口 查询参数 锚点 url字符 urlcode字符 绝对url和相对url 二、字符编码 Ascll字符集 html字符集 html的url编码 …

【剑指Offer 05】 替换空格,Java解密。

LeetCode 剑指Offer 75道练习题 文章目录 剑指Offer:替换空格题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例:限制:解题思路:剑指Offer:替换空格 题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例: 输入:s =…

P1807 最长路

最长路 题目描述 设 G G G 为有 n n n 个顶点的带权有向无环图&#xff0c; G G G 中各顶点的编号为 1 1 1 到 n n n&#xff0c;请设计算法&#xff0c;计算图 G G G 中 1 , n 1, n 1,n 间的最长路径。 输入格式 输入的第一行有两个整数&#xff0c;分别代表图的点数…

Pytorch深度学习-----神经网络之池化层用法详解及其最大池化的使用

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

深度学习Redis(5):集群

前言 在前面的文章中&#xff0c;已经介绍了Redis的几种高可用技术&#xff1a;持久化、主从复制和哨兵&#xff0c;但这些方案仍有不足&#xff0c;其中最主要的问题是存储能力受单机限制&#xff0c;以及无法实现写操作的负载均衡。 Redis集群解决了上述问题&#xff0c;实…