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

news2025/2/3 12:55:58

文章目录

  • 效果
  • QML代码
    • ClickableImage.qml文件
      • Image(图片)元素 解释
    • MyQML.qml文件
  • 解释:Window元素、Item元素、Image元素、MouseArea元素、Column元素、Row元素、Grid元素、Flow元、Repeater元素


在这里插入图片描述

效果

在这里插入图片描述

QML代码

ClickableImage.qml文件

图像

import QtQuick 2.0

Image {
    id: root
    // 定义信号
    signal clicked

    MouseArea {
        anchors.fill: parent
        // 单击图片 触发信号
        onClicked: root.clicked()
    }
}


Image(图片)元素 解释

这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释:

  • Image元素是一个用于显示图像的控件。
  • id: root是为Image元素指定了一个标识符,以便在代码中引用它。
  • signal clicked定义了一个名为clicked的信号。信号用于在特定的事件发生时通知其他代码。
  • MouseArea元素是一个用于处理鼠标事件的区域,并且该区域与父元素(即Image)的大小一致。
  • anchors.fill: parent将MouseArea元素的边界锚定在其父元素(Image)的边界上,使得区域大小与图片相同,并且当图片大小改变时,区域也会相应地改变。
  • onClicked: root.clicked()是一个信号处理器,它在鼠标单击事件发生时触发(通过MouseArea元素的onClicked属性定义)。root.clicked()是用于触发clicked信号的函数调用,通过将信号连接到其他代码,可以实现与该信号相关的自定义行为。

MyQML.qml文件

界面显示

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12


Window {
    id: window
    visible: true
    width: 1024
    height: 800
    title: qsTr("QML study")

    // 简单的图形处理
    Item {
        // 基于给定背景设置宽度
        id: item1
        width: bg.width
        height: bg.height

        Image { // 漂亮的背景图像
            id: bg
            source: "pic//4.jpg"
            width: window.width
            height: window.height
        }

        MouseArea {
            id: backgroundClicker
            //需要在图像之前,因为顺序很重要
            //否则,该鼠标区域将位于其他元素之前
            //并消耗鼠标事件
            anchors.fill: parent
            onClicked: {
                //重置我们的小场景
                circle.x = 5
                box.rotation = 0
                triangle.scale = 1.0

                all.x = (window.width - all.width)/2
                all.y = (window.height - all.height)/2
                all.rotation = 0
                all.scale = 1.0
            }
        }

        // 平移
        ClickableImage {
            id: circle
            x: 5; y: 5
            source: "pic//menu.png"
            antialiasing: true
            onClicked: {
                x += 20
            }
        }

        // 旋转 顺时针
        ClickableImage {
            id: box
            x: 5; y: circle.height + 40
            source: "pic//setting.png"
            antialiasing: true
            onClicked: {
                rotation += 15
            }
        }

        // 缩放
        ClickableImage {
            id: triangle
            x: 5; y: box.height + circle.height + 60
            source: "pic//search.png"
            antialiasing: true
            onClicked: {
                scale += 0.05
            }
        }

        // 平移 旋转 缩放
        ClickableImage {
            id: all
            x: (window.width - width)/2; y: (window.height - height)/2
            source: "pic//clock.png"
            antialiasing: true
            onClicked: {
                x  += 20
                rotation += 15
                scale += 0.05
            }
        }

        Column  {
            id: column
            spacing: 8
             x: (window.width - width)/2 + 100; y: 5

            Rectangle {
                id : red
                width: 48
                height: 48
                color: "red"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : blue
                width: 48
                height: 48
                color: "blue"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : green
                width: 48
                height: 48
                color: "green"
                border.color: Qt.lighter(color)
            }
        }

        Row  {
            id: row
            spacing: 8
             x: (window.width - width)/2 + 300; y: 5

            Rectangle {
                id : yellow
                width: 48
                height: 48
                color: "yellow"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : grey
                width: 48
                height: 48
                color: "grey"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }
        }

        Grid  {
            id: grid
            rows: 2
            columns: 2
            spacing: 8
             x: (window.width - width)/2 + 300; y: 100

            Rectangle {
                id : purple
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : purple1
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : purple2
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : purple3
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }
        }

        Flow  {
            id: flow
            spacing: 8
             x: (window.width - width)/2 + 300; y: 300

            Rectangle {
                id : black1
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black2
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black3
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black4
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }
        }

        Rectangle {
            id: root
            width: 252
            height: 252
            x: (window.width - width)/2 + 300; y: 400
            property variant colorArray: ["#00bde3", "#67c111", "#ea7025"]

            Grid{
                anchors.fill: parent
                anchors.margins: 8
                spacing: 4
                Repeater {
                    model: 16   // 16个单元格的网格
                    delegate: Rectangle {   // 代理矩形
 /*
index属性是一个整数,用于存储每个Rectangle元素的索引值。
在Repeater中,每个重复的矩形元素都有一个自己的索引值,从0开始递增。
colorIndex属性是一个整数,用于存储每个Rectangle元素的随机颜色的索引值。
在这里,使用Math.random()函数生成一个0到1之间的随机数,
然后乘以3并通过Math.floor()函数取整来获取0到2之间的随机整数作为颜色索引值。*/

                        property int index	// 可以不用
                        property int colorIndex: Math.floor(Math.random()*3)


                        width: 56; height: 56
                        color: root.colorArray[colorIndex]
                        border.color: Qt.lighter(color)

						// 小矩形文本
                        Text {
                            anchors.centerIn: parent
                            color: "#f0f0f0"
                            text: "Cell " + parent.index		// 默认0 替换为colorIndex
                        }
                    }
                }
            }
        }
    }
}

解释:Window元素、Item元素、Image元素、MouseArea元素、Column元素、Row元素、Grid元素、Flow元、Repeater元素

这段代码是一个使用QtQuick的QML(Qt Meta-Object Language)语法编写的窗口应用程序示例。以下是代码的解释:

  • import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 2.12是导入QtQuick和相关库的语句,用于引入相应版本的QtQuick和其附带的窗口和控件模块。

  • Window元素是一个顶层窗口元素,用于创建一个应用程序窗口。

    • id: window为窗口指定了一个标识符,以便在代码中引用它。
    • visible: true指定窗口默认为可见状态。
    • width: 1024height: 800指定了窗口的初始宽度和高度。
    • title: qsTr("QML study")设置了窗口的标题为"QML study"。
  • Item元素是一个基本的可视化元素,可以放置其他元素,并定义了一些基本的属性。

    • id: item1为Item指定了一个标识符,以便在代码中引用它。
    • width: bg.widthheight: bg.height使Item的宽度和高度与Image元素(bg)的宽度和高度相同,实现根据背景图的大小来设置Item的大小。
  • Image元素用于显示图像。

    • id: bg为Image指定了一个标识符,以便在代码中引用它。
    • source: "pic//4.jpg"指定要显示的图像文件的路径。
    • width: window.widthheight: window.height将Image的宽度和高度设置为窗口的宽度和高度,以填充整个窗口。
  • MouseArea元素用于处理鼠标事件。

    • id: backgroundClicker为MouseArea指定一个标识符,以便在代码中引用它。
    • anchors.fill: parent将MouseArea元素的边界设置为与父元素(Item)的边界相同,使得该区域可以覆盖整个父元素。
    • onClicked是一个MouseArea元素的信号,当鼠标在该区域内被单击时触发。
      • circle.x = 5box.rotation = 0triangle.scale = 1.0用于重置一些元素的位置和属性。
      • all.x = (window.width - all.width)/2all.y = (window.height - all.height)/2将all元素居中放置在窗口中心。
      • all.rotation = 0all.scale = 1.0将all元素的旋转角度和缩放比例重置为默认值。
  • ClickableImage元素是一个图像元素,用于处理鼠标点击事件,并具有一些可操作的属性。

    • xy属性指定了图像元素的初始位置。
    • source属性指定了要显示的图像文件的路径。
    • antialiasing: true开启了图像的抗锯齿效果。
    • onClicked是一个ClickableImage元素的信号,当图像元素被单击时触发。
      • x += 20使图像元素在x轴上移动20个单位。
      • rotation += 15使图像元素顺时针旋转15度。
      • scale += 0.05使图像元素的缩放比例增加0.05。
  • Column元素是一个垂直排列的布局元素,用于将子元素按列排列。

    • id: column为Column指定了一个标识符,以便在代码中引用它。
    • spacing: 8指定了列中子元素之间的垂直间距。
    • xy属性指定了Column元素的初始位置。
  • Row元素是一个水平排列的布局元素,用于将子元素按行排列。

    • id: row为Row指定了一个标识符,以便在代码中引用它。
    • spacing: 8指定了行中子元素之间的水平间距。
    • xy属性指定了Row元素的初始位置。
  • Grid元素是一个网格布局元素,可以将子元素按行和列组织成网格。

    • id: grid为Grid指定了一个标识符,以便在代码中引用它。
    • rows: 2columns: 2指定了网格的行和列数。
    • spacing: 8指定了网格中子元素之间的间距。
    • xy属性指定了Grid元素的初始位置。
  • Flow元素是一个流式布局元素,可以根据可用空间自动调整子元素的位置。

    • id: flow为Flow指定了一个标识符,以便在代码中引用它。
    • spacing: 8指定了子元素之间的间距。
    • xy属性指定了Flow元素的初始位置。
  • Rectangle元素用于创建矩形对象。

    • id属性为Rectangle指定了一个唯一的标识符。
    • widthheight属性指定了矩形的宽度和高度。
    • color属性指定了矩形的填充颜色。
    • border.color属性指定了矩形的边框颜色。
  • Repeater元素是一个重复器,用于根据模型数据重复创建子元素。

    • model: 16指定重复器的模型为一个包含16个项目的数组。
    • delegate属性指定了要重复创建的子元素的定义。
      • Rectangle元素作为子元素的代理,并定义了一些属性。
      • widthheight属性指定了子元素(矩形)的宽度和高度。
      • color属性为矩形指定了一个随机的颜色。
      • border.color属性为矩形的边框指定了一个颜色。
      • Text元素是一个子元素,用于在矩形中心显示文本。

整个代码创建了一个窗口应用程序,其中包含了图像元素、布局元素和子元素的交互逻辑。这些元素通过使用QtQuick的QML语法来定义和布局,并且可以通过信号和事件的连接来实现交互和状态的改变。
做下更改

Grid{
                anchors.fill: parent
                anchors.margins: 8
                spacing: 4
                Repeater {
                    model: 16   // 16个单元格的网格
                    delegate: Rectangle {   // 代理矩形
                        property int colorIndex: Math.floor(Math.random()*3)

                        width: 56; height: 56
                        color: root.colorArray[colorIndex]
                        border.color: Qt.lighter(color)

                        Text {
                            anchors.centerIn: parent
                            color: "#f0f0f0"
                            text: "Cell " + parent.colorIndex
                        }
                    }
                }
            }

在这里插入图片描述

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

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

相关文章

[JavaScript] 第三章 Chrome 浏览器中执行 JavaScript

系列文章目录 [JavaScript] 第一章 暂无 [JavaScript] 第一章 暂无 [JavaScript] 第三章 Chrome 浏览器中执行 JavaScript 文章目录 系列文章目录前言1、准备工作1.1、创建html工程1.2、创建html文件夹,存放html文件1.3、创建JavaScript演示html1.4、通过idea打开页…

Unity打包窗口化放大、缩小、拖拽功能、无边框设置 C#

Unity打包Windows窗口实现放大、缩小、拖拽、无边框 文章目录 Unity打包Windows窗口实现放大、缩小、拖拽、无边框前言一、引入 user32.dll二、使用步骤1.引入库2.功能封装3.效果图如下,绑定自定义按钮 总结 前言 Unity无边框设置、窗口化放大、缩小、拖拽 提示&am…

蓝牙耳机选购攻略:开放式耳机篇!如何选购开放式耳机?开放式蓝牙耳机哪些品牌比较好?过来人告诉你如何选购开放式耳机!

作为一个耳机爱好者,最近更是喜欢上了开放式蓝牙耳机,实际用过的起码有十几款,但其实最终能留下来的也只有四五款。由于前期并不知道应该如何选择开放式耳机,经常都会高价买到些质量差、音质也不好、漏音大的开放式耳机&#xff0…

DKN和KGC阅读

1. DKN 作者将外部知识图包含的知识融入新闻嵌入。 (1)将新闻标题单词词嵌入,单词链接的实体嵌入,以及实体的上下文嵌入(邻居实体嵌入的平均)建模为CNN输入的三个通道。 (2)然后使用KCNN模型&#xff0c…

排序【数据结构】

1、排序的概念 排序: 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序…

一个月学通Python(十九):Cookie和Session是什么(Web开发)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3章,1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程&…

C++:这门语言优势在哪?命名空间以及缺省参数?

文章目录 C的优势解决命名空间的问题 缺省参数 C的优势 C和C语言比起来有许多优势&#xff0c;这里我们先举一个例子&#xff0c;后续进行补充 解决命名空间的问题 首先看这样的代码&#xff1a; #include <stdlib.h> #include <stdio.h>int rand 0;int main(…

k8s服务发现之第二弹Service详解

创建 Service Kubernetes Servies 是一个 RESTFul 接口对象&#xff0c;可通过 yaml 文件创建。 例如&#xff0c;假设您有一组 Pod&#xff1a; 每个 Pod 都监听 9376 TCP 端口每个 Pod 都有标签 appMyApp apiVersion: v1 kind: Service metadata:name: my-service spec:s…

创建users子应用

1.创建&#xff1a;(venv) xxxx>python manage.py startapp users 2.移动到apps里面&#xff1b; 3.在settings里面注册子应用&#xff1b; # 注册子应用 apps/users apps/users/apps name apps.users 这个路径是什么就写什么 INSTALLED_APPS [ # 用[../namage.py st…

架构训练营学习笔记:4-3存储架构模式之分片架构和分区架构

分片架构的本质&#xff1a; 分片架构能提升写性能和存储性能&#xff0c;对应的主备架构的本质是备份&#xff0c;主从架构本质提升读性能。 分片架构的两个关键点&#xff1a;分片规则跟路由规则 分片规则&#xff1a; 选择基数比较大的某个数据键值&#xff0c;让数据均匀…

第七章 集成学习

文章目录 第七章 集成学习7.1个体和集成7.2Boosting和AdaBoost7.3Bagging和随机森林7.3.1Bagging7.3.2随机森林 7.4结合策略7.4.1平均法7.4.2投票法7.4.3学习法 7.6实验&#xff1a;Adaboost 第七章 集成学习 7.1个体和集成 集成学习通过构建并结合多个学习器来完成学习任务&…

TS报错Cannot find module ‘xxx‘ or its corresponding type declarations

最近使用 vite vue3 ts 开发一个文本标注的 web 平台&#xff0c;在项目中使用了一个 js-mark 的 npm 包&#xff0c;但是在 import 导入后出现了 TS 报错&#xff1a;TS2307: Cannot find module js-mark or its corresponding type declarations.、无法解析模块 js-mark 的…

Safe Policy Optimization 复现

复现结果 在 PointGoal1、CarGoal1、Velocity-Walker2d 三个任务上测试了 RCPO&#xff0c;CRPO 以及 Safe-Policy-Optimization 中实现的 CPO&#xff0c;PPO-Lag 算法。 CarGoal PointGoal PointGoal1 和 CarGoal1 任务相对比较困难&#xff0c;在探索初期就很容易违反约束…

Dart语言(01)环境安装基础语法总结

0 说明&#xff1a; 说明&#xff1a;该系列教程主要是为有一定语言基础 C/C的程序员&#xff0c;快速学习一门新语言所采用的方法&#xff0c;属于在C/C基础上扩展新语言只是体系的方式。 1 Dart语言简介 Dart亮相于2011年10月10日至12日在丹麦奥尔胡斯举行的GOTO大会&…

【动手学深度学习】--09.PyTorch神经网络基础

文章目录 PyTorch神经网络基础1.层和块1.1自定义块1.2顺序块1.3在前向传播函数中执行代码 2.参数管理2.1参数访问2.1.1目标参数2.1.2一次性访问所有参数2.1.3从嵌套块收集参数 2.2参数初始化2.2.1内置初始化2.2.2自定义初始化 2.3参数绑定 3.自定义层3.1不带参数的层3.2带参数的…

Python爬虫学习笔记:1688商品详情API 开发API接口文档

1688API接口是阿里巴巴集团推出的一种开放平台&#xff0c;提供了丰富的数据接口、转换工具以及开发资源&#xff0c;为开发者提供了通用的应用接口及大量数据资源&#xff0c;支持开发者在1688上进行商品搜索、订单管理、交易报表及物流等方面的操作。 1688API接口主要包含以…

解密成功之道!加湿制冷设备企业如何借助CRM系统降低经营成本?

如何降低企业经营成本的同时提高效率是加湿制冷设备企业关注的重要问题。在这篇软文中&#xff0c;我们将探讨如何通过CRM系统来实现这一目标。企业可以借助CRM系统提高客户关系管理水平&#xff0c;优化销售流程&#xff0c;提升售后服务&#xff0c;从而降低成本&#xff0c;…

价格监测的作用有哪些

随着品牌的发展&#xff0c;销售渠道也会逐步增多&#xff0c;渠道中的问题也会逐渐显现&#xff0c;比如低价、乱价、窜货、假货&#xff0c;所以品牌一般都会进行控价治理&#xff0c;控价最重要的一步便是价格监测&#xff0c;监测出来的价格高低&#xff0c;能直接反应渠道…

抑郁症缓解方法:从心理到行为,全方位提升生活质量

抑郁症是一种常见的心理疾病&#xff0c;不仅仅是心情低落&#xff0c;它还伴随着一系列的身体和心理症状。在应对抑郁症时&#xff0c;除了积极寻求医学专业人士的帮助之外&#xff0c;以下这些招数也可以帮助你缓解抑郁症。 1.保持规律的生活习惯&#xff1a;抑郁症患者往往会…

小程序地图个性化样式组件要收费了!

地图个性化样式组件 自2023年6月29日0点起&#xff0c;该能力需要先购买再使用。若未购买&#xff0c;届时将无法使用该能力。具体购买方式见付费管理。自2023年6月29日0时起&#xff0c;个性化地图配置界面的入口统一为微信公众平台-付费管理&#xff0c;请从此入口进入&#…