Qt6 Qt Quick UI Prototype学习QML第一篇

news2025/1/10 11:16:54

Qt6 Qt Quick UI原型学习QML第一篇

  • 开始创建项目
  • Qt Quick UI原型简介
  • .qmlproject文件
  • 举例Window平台小例子
  • 运行效果
  • QML语法 了解语法


在这里插入图片描述
在这里插入图片描述

开始创建项目

在这里插入图片描述
创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。
仅当您正在进行原型设计时才使用此功能。您无法使用此创建完整的应用程序。请考虑使用Qt Quick application项目

在这里插入图片描述


Qt Quick UI原型简介

Qt Quick UI原型主要用于快速创建交互式的用户界面(UI)原型。它是用Qt
Quick技术开发的,允许开发人员在构建应用程序之前验证和展示其设计概念和交互想法。

通过使用Qt Quick UI原型,可以以可视化方式创建和排列UI元素、定义动画和过渡效果、设置用户交互等。这样可以快速实现并演示应用程序的基本外观和功能,以便设计师和开发人员能够更早地探索并验证设计决策。

Qt Quick UI原型提供了一组丰富的可重用UI组件和布局选项,使开发人员能够快速构建具有丰富用户体验的原型。它还支持与后端逻辑的连接,并可以与其他Qt框架和工具集成,如Qt Creator和Qt Design Studio。

总而言之,Qt Quick UI原型的主要目的是促进更快的UI设计、迭代和验证过程,以提高应用程序开发的效率和质量。


.qmlproject文件

自动生成,暂且不管

/* Qt创建者生成的文件 */

import QmlProject 1.1

Project {
    mainFile: "untitled2.qml"

    /* 包括当前目录和子目录中的.qml、.js和图像文件 */
    QmlFiles {
        directory: "."
    }
    JavaScriptFiles {
        directory: "."
    }
    ImageFiles {
        directory: "."
    }

    /*传递给QML运行时的插件目录列表 */
    // importPaths: [ "../exampleplugin" ]
}

举例Window平台小例子

代码注释了

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480

    // 窗口标题
    title: qsTr("QML语法")

    // 矩形
    Rectangle {
        // 每个元素都有唯一的id
        id:root;

        // 宽 高
        width: 640; height: 480

        // 字体颜色
        color: "#4A4A4A"

        Image {
            id: triangle

            // 相对于父元素 Rectangle的坐标位置
            x: (parent.width - width)/2; y: (parent.height  - height)/2

            // 请注意,您需要将file:///添加到本地文件路径的开头,以指示该路径是一个文件URL。
            source: "file:///C://Users//ll//Desktop//QT Projects//untitled2//pic//clock.png"
            // 设置图片的宽度和高度
            sourceSize: Qt.size(400,400);
        }

        Text {
            id: label

            x: (parent.width - width)/2; y:50

            // 基于焦点值更改颜色 focus 的值true false 三目运算符
            color: focus ? "white" : "black"
            // 字体设置
            font.family: "Ubuntu"
            font.pixelSize: 24

            // 文本对齐
            horizontalAlignment: Text.AlignHCenter

            // 定义属性 变量
            property int spacePresses: 0

            // 文本 类比setText
            text: "Space press: " + spacePresses + " times"

            // 信号 如何需要传参数就要用function(参数)
            onTextChanged: function(text)
            {
                 // 控制台输出 类比qDebug()
                 console.log("text changed to : " , text)
             }

            // 接收关键事件需要焦点  键盘
            focus: true

            // 键盘 空格按压触发
            Keys.onSpacePressed: {
                increment()
            }

            // 键盘 Esc 按下触发
            Keys.onEscapePressed: {
                // 按下escape后,按下空格键将不再更新显示,因为text属性(文本: "按下空格:"+按下空格+"次")被毁了。
                label.text = ''
            }

            // JavaScript函数increment()
            function increment() {
                spacePresses = spacePresses + 1;
            }
        }
    }
}

运行效果

在这里插入图片描述
按压空格键
在这里插入图片描述
按压ESc
在这里插入图片描述


QML语法 了解语法

QML语法
QML是一种用于描述对象如何相互关联的声明性语言。QtQuick是一个基于QML的框架,用于构建应用程序的用户界面。它将用户界面分解成更小的元素,这些元素可以组合成组件。QtQuick描述了这些用户界面元素的外观和行为。这个用户界面描述可以用JavaScript代码来丰富,以提供简单但也更复杂的逻辑。从这个角度来看,它遵循HTML-JavaScript模式,但QML和QtQuick是从头开始设计来描述用户界面,而不是文本文档。

在其最简单的形式中,QtQuick允许您创建元素的层次结构。子元素从父元素继承坐标系。一个x,y坐标始终相对于父对象。

在这里插入图片描述
import语句导入一个模块。以下形式的可选版本.可以添加。
可以使用以下方式进行评论//对于单行注释或/* */对于多行评论。就像在C/C++和JavaScript中一样
每个QML文件都需要有一个根元素,比如HTML
元素由其类型声明,后跟{ }
元素可以有属性,它们的形式是name: value
QML文档中的任意元素可以通过使用它们的id(未加引号的标识符)
元素可以嵌套,这意味着父元素可以有子元素。父元素可以使用parent关键字
与import语句通过名称导入QML模块。在Qt5中,您必须指定主要版本和次要版本(例如2.15),这在Qt6中是可选的。对于书籍内容,我们删除了这个可选的版本号,因为通常情况下,您会自动从所选的Qt套件中选择最新版本。

tip

通常,您希望通过id访问特定的元素,或者使用parent关键词。因此,将根元素命名为“root”是一个很好的实践,使用id: root。那么您就不必考虑根元素在您的QML文档中是如何命名的。


让我们来了解一下属性的不同特征:

(1) id是一个非常特殊的类似属性的值,它用于引用QML文件(在QML称为“文档”)中的元素。
这id不是字符串类型,而是标识符,是QML语法的一部分。
一个id在文档中需要是唯一的,不能被重置为不同的值,也不能被查询。(它的行为很像C++世界中的引用。)

(2)根据属性的类型,可以将属性设置为一个值。如果没有为属性指定值,将选择初始值。
有关属性初始值的更多信息,您需要查阅特定元素的文档。

(3)一个属性可以依赖于一个或多个其他属性。这叫做有约束力的。当绑定属性的依赖属性更改时,
绑定属性会更新。它像合同一样工作,在这种情况下height应该总是两倍于width.

(4)向元素添加新属性是使用property限定符,后跟类型、名称和可选的初始值(property <type> <name> : 
<value>).如果没有给定初始值,则选择默认初始值。

(5)声明属性的另一种重要方式是使用alias关键词(property alias <name>: <reference>).
这alias关键字允许我们将对象的属性或对象本身从类型内部转发到外部范围。
我们将在稍后定义组件时使用这种技术,将内部属性或元素id导出到根级别。属性别名不需要类型,
它使用被引用的属性或对象的类型。

(6)这text属性依赖于自定义属性timesint类型的。这int基值自动转换为string类型。
表达式本身是绑定的另一个例子,它导致文本在每次times属性变化。

(7)有些属性是分组属性。当一个属性更加结构化,并且相关属性应该被分组在一起时,使用该功能。
编写分组属性的另一种方式是font { family: "Ubuntu"; pixelSize: 24 }.

(8)有些属性属于元素类本身。这是为在应用程序中只出现一次的全局设置元素(如键盘输入)完成的。
写的是<Element>.<property>: <value>.

(9)对于每个属性,您可以提供一个信号处理程序。此处理程序在属性更改后调用。
例如,这里我们希望在高度变化时得到通知,并使用内置控制台向系统记录一条消息。

QML和JavaScript(也称为ECMAScript)是最好的朋友。

(1)文本更改处理程序onTextChanged每次文本因按下空格键而改变时,打印当前文本。
当我们使用信号注入的参数时,我们需要在这里使用函数语法。也可以使用箭头功能((text) => {}),
但是我们觉得function(text) {}可读性更强。

(2)当文本元素收到空格键(因为用户按了键盘上的空格键)时,我们调用一个JavaScript函数increment().


(3)形式的JavaScript函数的定义function <name>(<parameters>) { ... },这增加了我们的计数器
spacePresses。每次spacePresses时,绑定属性也将被更新。

QML的区别:(绑定)和JavaScript=(赋值)是绑定是一个契约,在绑定的整个生命周期内保持不变,而JavaScript赋值(=)是*一次性赋值*

当在属性上设置新绑定时,或者甚至当JavaScript值被赋给属性时,绑定的生存期结束。例如,将text属性设置为空字符串的键处理程序会破坏我们的增量显示:

Keys.onEscapePressed: { label.text = '' } 按下escape后,按下空格键将不再更新显示,因为text属性(文本: “按下空格:”+按下空格+“次”)被毁了。

在这种情况下,当您有冲突的策略来更改属性时(通过绑定由属性增量的更改更新的文本和由JavaScript赋值清除的文本),那么您不能使用绑定!您需要在两个属性更改路径上使用赋值,因为赋值会破坏绑定(破坏契约!).


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

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

相关文章

学C的第二十六天【指针的进阶(二)】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第二十五天【指针的进阶&#xff08;一&#xff09;】_高高的胖子的博客-CSDN博客 6 . 函数指针数组 &#xff08;1&#xff09;. 含义&#xff1a; 函数指针数组 是一个数组&a…

CSDN 周赛 63 期

CSDN 周赛 63 期 参赛体验63期周赛题目题目名称:小玉家的电费题目名称:收件邮箱题目名称:饿龙咆哮-逃离城堡题目名称:寻找宝藏山小结参赛体验 这次是最近难得的四个编程题的比赛了,可惜出了一个骗分题。 然后,今天早上进入考试,还好几次,连进都进不去 嗯,最后是开着…

开源代码分享(7)—考虑电动汽车可调度潜力的充电站两阶段市场投标策略(附matlab代码)

[1]詹祥澎,杨军,韩思宁等.考虑电动汽车可调度潜力的充电站两阶段市场投标策略[J].电力系统自动化,2021,45(10):86-96. 摘要&#xff1a;在电力市场环境下,充电站优化投标策略能降低电力成本&#xff0c;甚至通过售电获取收益。文中考 虑了电动汽车成为柔性储荷资源的潜力&#…

android 下载源码 一路踩坑

python 从 2.0 升级到3.0 从官网下载 pyhon3.0 安装器,然后更改配置 # Setting PATH for Python 3.8# The original version is saved in .bash_profile.pysaveexport PATH"/Library/Frameworks/Python.framework/Versions/3.11/bin:$PATH"alias python"/Libr…

h5真机调试之ios和Android和vconsole

目录 1&#xff1a;h5真机调试之Android01&#xff1a;安卓端 小米11开启开发者模式02&#xff1a;Android edge 2&#xff1a;h5真机调试之ios1&#xff1a;iOS Safari 3&#xff1a;真机链接本地项目 之 Android &#xff08; 重点 &#xff09;3-1 vconsole的安装与使用 (…

计算机服务器中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

计算机服务器被360后缀勒索病毒攻击&#xff0c;会给企业的正常生产运转带来极大麻烦&#xff0c;最近&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器被360后缀勒索病毒攻击。360后缀勒索病毒是BeijingCrypt勒索家族的一种病毒&#xff0c;该病毒通过远程桌面攻击…

57、mysql执行计划怎么看

mysql执行计划怎么看 执行计划就是sql的执行查询的顺序&#xff0c;以及如何使用索引查询&#xff0c;返回的结果集的行数 EXPLAIN SELECT * from A where X? and Y?1、id: 是一个有顺序的编号&#xff0c;是查询的顺序号&#xff0c;有几个 select 就显示几行。id的顺序是…

[java安全]CommonsCollections1(LazyMap)

文章目录 【java安全】CommonsCollections1(LazyMap)前言LazyMap如何创建LazyMap对象&#xff1f;如何调用LazyMap的get()方法&#xff1f;如何触发AnnotationInvocationHandler#invoke()方法&#xff1f;POC总结参考 【java安全】CommonsCollections1(LazyMap) 前言 前面我们…

索尼ILCE-7SM3覆盖部分恢复案例

ILCE-7SM3&#xff0c;算是索尼的经典之作&#xff0c;目前市场占用率相当高。下边这个案例就是格式化后又拍摄了不少素材导致覆盖产生的典型情况。 故障存储:120G SD卡 故障现象: 拍摄素材后备份数据&#xff0c;设备交付其他人使用&#xff0c;结果发现少备份一条比较大的…

【grasshopper】【犀流堂】【算法】Anemone雨水径流模拟-笔记

文章目录 Anemone雨水路径模拟available options可用选项grasshopper面切线几何原理 案例1&#xff1a;surface地形1. 拾取地形曲面surface2. 曲面上根据divide surface划分点points3.将曲面上的划分点用surface closest point投影到曲面上4.align plane旋转平面x轴与世界Z夹角…

git 工具使用--分支管理

git 工具使用–分支管理 文章目录 git 工具使用--分支管理理解分支创建分支切换分支合并分支删除分支合并冲突分支管理策略分支策略bug分支删除临时分支总结 理解分支 分支管理是Git的杀手级功能之一。分支&#xff1a;就是科幻中的平行宇宙&#xff0c;当你正在电脑面前学习C…

7.15-7.16枚举题目精讲

枚举 A - TogetherB - Fractions Again? A - Together 题目描述 题意分析 题意&#xff1a;给出n个数&#xff0c;可以对每一个数做三种操作a&#xff0c;a1,a-1&#xff0c;求所有操作完成后出现次数最多的数的个数。 分析&#xff1a;对于每个数枚举三种操作后的值&#xf…

神经网络初识-以MINST数据集和CIFAR10数据集为例

文章目录 1 什么是神经网络1.1 神经元模型1.2 感知机1.3 多层神经网络1.4 为什么要使用神经网络 2 全连接神经网络2.1 简介2.2 梯度下降2.2 反向传播2.3 代码实现 3 卷积神经网络3.1 简介3.2 代码实现 总结 1 什么是神经网络 人工神经网络&#xff08;artificial neural netwo…

【论文精读】Vis-MVSNet: Visibility-aware Multi-view Stereo Network

今天属于是重读经典了&#xff0c;这是一篇发表在BMVC2020上的文章&#xff0c;试图解决MVS中可见性的问题。该文章最近在拓展之后被发表在了IJCV上。本文的解读是基于扩展之后的IJCV版本&#xff0c;期刊的版本内容更加详细一点。 文章链接&#xff1a;BMVC2020版本和IJCV版本…

【电子学会】2023年05月图形化四级 -- 绘制同心圆

绘制同心圆 1. 准备工作 &#xff08;1&#xff09;保留小猫角色&#xff1b; &#xff08;2&#xff09;背景为默认白色。 2. 功能实现 &#xff08;1&#xff09;点击绿旗&#xff0c;小猫询问“请问绘制几个同心圆&#xff1f;”&#xff1b; &#xff08;2&#xff09;…

044、TiDB特性_PlacementPolicy

Placement Rules in SQL之前 跨地域部署的集群&#xff0c;无法本地访问无法根据业务隔离资源难以按照业务登记配置资源和副本数 Placement Rules in SQL之后 跨地域部署的集群&#xff0c;支持本地访问根据业务隔离资源按照业务等级配置资源和副本数 配置 labels 设置 Ti…

这个怎么弄?电脑没有d3dx9_43.dll?

在使用某些电脑软件或游戏时&#xff0c;遇到这样的提示&#xff1a;找不到d3dx9_43.dll&#xff0c;无法继续执行代码。这个问题比较常见&#xff0c;很多人不知道该怎么解决。如果你也遇到这个问题&#xff0c;不要着急。本文将详细介绍如何解决找不到d3dx9_43.dll无法继续执…

计算机网络基础第四章

一、网络层概述 1.1 网络层功能概述 主要任务是把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 功能一&#xff1a;路由选择与分组转发&#xff08;最佳路径&#xff09;功能二&#xff1a;异构网络互联功能三&#xf…

23年测试岗面试,高频自动化测试面试题(付答案)

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

高等数学专题(1)三角函数公式大全

本帖的公式内容可以并列全网最全&#xff08;doge&#xff09;&#xff0c;博主多方面搜集并总结了最重要和常用的三角函数公式&#xff0c;具体为以下几个内容&#xff1a; 1.诱导公式 2.平方关系 3.二倍角公式 4.半角公式 5.和差角公式 6.积化和差 7.和差化积 8.辅助角公式 9…