【QT Quick】基础语法:导入外部QML文件
在实际项目中,代码通常分为多个文件进行模块化管理,这样可以方便代码重用,例如统一风格或共享功能模块。我们将在此部分学习如何创建 QML 项目,并演示如何访问外部代码,包括其他 QML 文件、库文件以及 JS 代码。
准备开发环境
在开发环境方面,我们尽量只使用纯 QML,不结合 C++,这样就可以避免频繁编译。建议使用以下两种工具之一进行开发:
-
VS Code + 命令行:可以通过命令行来执行 QML 文件。
-
Qt Creator:在课程中,我们选择使用 Qt Creator 来创建项目。Qt Creator 提供了 Qt Quick UI 原型系统,用于快速验证 QML 语法。以下是使用 Qt Creator 创建项目的步骤:
-
打开 Qt Creator,选择创建一个 “Qt Quick 项目”(即 UI 原型系统),该类型的项目不需要 C++ 代码。
-
确定项目配置,如 SDK 和工具链设置。
-
项目创建后,生成了一个默认的 QML 项目结构,包括入口文件
main.qml。
-
访问同一目录下的文件
在 QML 项目中,如果我们希望引用同一目录下的其他 QML 文件,可以通过以下方式实现:
- 文件名必须以大写字母开头。
- 直接使用文件名作为类型名,不需要导入(import)任何内容。
创建新的 QML 文件
-
在项目目录下创建一个新文件,命名为
MyType.qml(文件名首字母必须大写)。 -
在
MyType.qml中定义内容,例如:// MyType.qml import QtQuick 2.0Text {text: "MyType Text" }这里我们创建了一个简单的
Text元素,以便验证文件是否被成功调用。
在主 QML 文件中使用自定义类型
在主 QML 文件(如 main.qml)中使用自定义类型 MyType:
import QtQuick 2.0Rectangle {width: 400height: 400MyType {anchors.centerIn: parentx: 100y: 50}
}
- 这里我们直接使用
MyType,将其作为一个组件插入到主界面中。 - 可以对自定义类型的属性进行调整,例如位置
x和y,或者使用anchors进行布局。
验证结果
运行项目时,您应该会看到自定义类型 MyType 的 Text 显示在界面上。这样就成功演示了如何在同一目录下访问其他 QML 文件。
访问外部文件
在 QML 中,可以使用 import 关键字访问外部库。这种方式非常类似于 C++20 及其他现代编程语言中导入外部模块的方式。我们将在这一章节中了解如何导入 QML 系统库以及自定义库,并讨论可能遇到的命名冲突问题。
import 语法
在 QML 中导入外部库时,通常需要指定库的名称、版本号以及可选的命名空间标识符 as。其一般格式如下:
import 库名称 版本号 as 命名空间
例如,以下代码导入了 QtQuick 库的 6.0 版本:
import QtQuick 6.0
库的名称与版本号
- 库名称:导入的库名称可以是系统自带的库,如
QtQuick、QtQuick.Controls等,也可以是自定义的库。 - 版本号:版本号通常包括主版本号和次版本号(例如
6.0)。在 QML 中,通过指定版本号来确保使用特定的 API 版本。如果不指定版本号,默认会使用安装的最新版本。 - 版本兼容性:QML 支持兼容多个版本的库,因此可以同时提供新版本和旧版本的兼容支持。例如,可以导入
6.0版本的库,但如果项目需要兼容较低版本,则可以同时提供多个版本的实现。
解决命名冲突
当导入多个库时,有可能会遇到命名冲突的问题,比如多个库中都存在同名组件。为了解决这种问题,可以使用 as 关键字为导入的库指定一个别名,这样就可以通过别名来访问库中的组件。
例如,以下代码导入了 QtQuick.Controls 并为其指定了别名 CON:
import QtQuick.Controls 6.0 as CONRectangle {width: 400height: 400// 使用带有命名空间的 Button 组件CON.Button {text: "This is a button from QtQuick.Controls"anchors.centerIn: parent}
}
通过这种方式,即使导入了多个库中存在同名的 Button,也可以通过别名来区分不同的库。
导入目录中的代码
在实际项目开发中,我们可能会将多个相关的 QML 文件放入一个目录中,这些文件可以被当作一个整体导入到主项目中。这样可以减少逐个导入的麻烦,并提高代码组织的清晰度。
-
步骤 1:在项目目录下创建一个新目录,例如
MyDir。 -
步骤 2:在
MyDir目录中创建多个 QML 文件,例如Type1.qml和Type2.qml。Type1.qml:import QtQuick 2.0Text {text: "This is Type 1" }Type2.qml:import QtQuick 2.0Text {text: "This is Type 2" } -
步骤 3:在主文件中导入整个目录。
import "MyDir"Rectangle {width: 400height: 400// 使用目录中定义的类型Type1 {anchors.top: parent.topanchors.horizontalCenter: parent.horizontalCenter}Type2 {anchors.bottom: parent.bottomanchors.horizontalCenter: parent.horizontalCenter} }
通过导入整个目录,可以使用该目录中的所有 QML 类型,而不需要逐个导入每个文件。
相关文章:
【QT Quick】基础语法:导入外部QML文件
在实际项目中,代码通常分为多个文件进行模块化管理,这样可以方便代码重用,例如统一风格或共享功能模块。我们将在此部分学习如何创建 QML 项目,并演示如何访问外部代码,包括其他 QML 文件、库文件以及 JS 代码。 准备…...
Llama 系列简介与 Llama3 预训练模型推理
1. Llama 系列简介 1.1 Llama1 由 Meta AI 发布,包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型 数据集:模型训练数据集使用的都是开源的数据集,总共 1.4T token 模型结构:原始的 Transformer 由编码器(…...
【AIGC】ChatGPT提示词助力自媒体内容创作升级
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯高效仿写专家级文章提示词使用方法 💯CSDN博主账号分析提示词使用方法 💯自媒体爆款文案优化助手提示词使用方法 💯小结 💯…...
SSTI基础
<aside> 💡 简介 </aside> 原理 又名:Flask模版注入 模版种类 **Twig{{7*7}}结果49 jinja2{{7*7}}结果为7777777 //jinja2的常见参数是name smarty7{*comment*}7为77**<aside> 💡 flask实例 </aside> **from …...
10.1软件工程知识详解上
软件工程概述 软件开发生命周期 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。软件开发时期:就是软件的设计与实现,可分成…...
03Frenet与Cardesian坐标系(Frenet转Cardesian公式推导)
Frenet转Cardesian 1 明确目标 已知车辆质点在Frenet坐标系下的状态: Frenet 坐标系下的纵向坐标: s s s纵向速度: s ˙ \dot{s} s˙纵向加速度: s \ddot{s} s横向坐标: l l l横向速度: l ˙ \dot{l} l…...
knowLedge-Vue I18n 是 Vue.js 的国际化插件
1.简介 Vue I18n 是 Vue.js 的国际化插件,它允许开发者根据不同的语言环境显示不同的文本,支持多语言。 Vue I18n主要有两个版本:v8和v9。v8版本适用于Vue2框架。v9版本适用于Vue3框架。 2. 翻译实现原理 Vue I18n 插件通过在 Vue 实例中注…...
【开源免费】基于SpringBoot+Vue.JS微服务在线教育系统(JAVA毕业设计)
本文项目编号 T 060 ,文末自助获取源码 \color{red}{T060,文末自助获取源码} T060,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
expressjs 中的mysql.createConnection,execute 怎么使用
在 Express.js 应用中使用 MySQL 数据库,你通常会使用 mysql 或 mysql2 这样的库来创建和管理数据库连接,并执行查询。然而,mysql.createConnection 并不直接提供 execute 方法。相反,你可以使用 query 方法来执行 SQL 语句。 以…...
每日一题|983. 最低票价|动态规划、记忆化递归
本题求解最小值,思路是动态规划,但是遇到的问题是:动态规划更新的顺序和步长,以及可能存在的递归溢出问题。 1、确定dp数组含义 dp[i]表示第i天到最后一天(可能不在需要出行的天数里),需要花费…...
oracle 正则 匹配 身份正 手机号
1.正则匹配身份证号: regexp_like(card_id,^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$) ^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$ ^[1-9]:第一位数字不能为0。 \d{5}:接下来…...
在树莓派上部署开源监控系统 ZoneMinder
原文:https://blog.iyatt.com/?p17425 前言 自己搭建,可以用手里已有的设备,不需要额外买。这套系统的源码是公开的,录像数据也掌握在自己手里,不经过不可控的三方。 支持设置访问账号 可以保存录像,启…...
2022年6月 Frontier 获得性能第一的论文翻译
为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化,rocHPL 是 AMD 对 HPL 基准的开源实现,主要是针对节点进行优化的架构,是为百万兆级系统而设计的,比如:Frontier suppercomput…...
B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态
在电商零售领域,商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展,各类新模式层出不穷,各种商城系统也应运而生,其中B2B商城更是最为常见的一种。 近年来,得益于电子商务的迅猛发展,B2B商…...
初始C语言(五)
前言 本文章就代表C语言介绍以及了解正式完成,后续进行具体分析和详细解析学习。知识根深蒂固才可以应付后来的学习,地基要打好,后续才会轻松。 十四、结构体 结构体是C语言中最最重要的知识点,使得C语言有能力描述复杂的类型。 …...
mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
1、SQL 修改表(ALTER TABLE 语句) 在编写一个SQL的ALTER TABLE语句时,你需要明确你的目标是什么。ALTER TABLE语句用于在已存在的表上添加、删除或修改列和约束等。以下是一些常见的ALTER TABLE语句示例,这些示例展示了如何修改表…...
【网络基础】网络常识快速入门知识清单,看这篇文章就够了
💐个人主页:初晴~ 在现在这个高度智能化的时代,网络几乎已经成为了空气一般无处不在。移动支付、网上购物、网络游戏、视频网站都离不开网络。你能想象如果没有网络的生活将会变成什么样吗🤔 然而如此对于如此重要的网络…...
OceanBase 关于一号表笔记与ERROR 1060(42S21)问题
OceanBase 关于客户端访问OceanBase 的表数据的过程说明 1.OBserver中的location cache 会保存observer 曾经访问过的实体表的位置信息(meta table 主要包括 __all_core_table、__all_root_table、__all_tenant_meta_table 三张内部表。OB 集群中所有实体表的 location&#x…...
【四】Spring Cloud OpenFeign原理分析
Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了,一直想着总结一下这系列的知识点,最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解,文中将会给出基础使用的示例,还…...
EDM平台大比拼 用户体验与营销效果双重测评
本文评测了ZohoCampaigns、Mailchimp、Sendinblue、AWeber四款EDM平台,分别适合中小企业、多平台集成、多功能集成、初学者等需求。建议企业根据自身规模、技术水平和功能需求选择最适合的平台。 一、Zoho Campaigns 功能概述 Zoho Campaigns是Zoho旗下的一款专注…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
