QT QML 练习4

news2024/11/25 4:51:44

效果:鼠标按下Tab建可以选选择标签或者方块之间的切换
请添加图片描述

这段代码使用了 QtQuick 框架,创建了一个包含两个 Text 元素和两个嵌套 Rectangle 的用户界面。以下是对代码中涉及的主要知识点和实现细节的介绍:

知识点及代码细节介绍

  1. 导入 QtQuick

    import QtQuick
    
    • QtQuick 是一个用于创建现代图形用户界面的核心模块,包含布局、动画、用户交互等功能。
  2. 根容器 (Rectangle)

    Rectangle {
        id: root
        width: 600
        height: 300
    }
    - `Rectangle` 作为整个界面的根容器。
    - 设置 `width` 和 `height` 为 600 和 300 像素,定义了窗口的大小。
    - `id: root` 用于标识该矩形,其他元素可以通过 `root` 来引用该对象。
    
    
  3. Text 元素 - thisLabel

    Text {
        id: thisLabel
        width: 150
        height: 100
        x: 24
        y: 100
        ...
    }
    
    • Text 元素用于显示文本内容。
    • 设置 id: thisLabel,标识符用于唯一标识该元素,方便在代码中引用。
    • widthheight 设置了文本框的大小为 150x100 像素。
    • x: 24y: 100 设置了文本框在 root 容器内的相对位置。
  4. 嵌套的 Rectangle

    Rectangle {
        anchors.fill: parent
        color: "yellow"
        z: parent.z - 1
    }
    
    • Rectangle 作为嵌套在 Text 内部的背景元素。
    • 使用 anchors.fill: parent 使得背景矩形填满 Text 元素的区域。
    • color: "yellow" 设置了背景颜色为黄色。
    • z: parent.z - 1 设置了 z 值,以控制元素的层次顺序。z 值越小,越靠后显示,因此该矩形会在文本内容的背后显示。
  5. 自定义属性 (property) 和别名属性 (property alias)

    property int times: 24
    property alias anotherTimes: thisLabel.times
    
    • property int times: 24 定义了一个自定义整数属性 times,初始值为 24。该属性可以用于存储和管理与该对象相关的数据。
    • property alias anotherTimes: thisLabel.times 定义了一个属性别名,将 thisLabeltimes 属性作为一个引用,这样其他组件可以通过 anotherTimes 来访问或修改 thisLabel.times 的值。
  6. 设置文本内容 (text)

    text: "thisLabel " + anotherTimes
    
    • text 属性用于设置 Text 元素显示的内容。
    • 这里使用字符串连接的方式将 "thisLabel "anotherTimes(即 thisLabel.times)连接在一起,用于显示动态内容。
  7. 字体属性 (font)

    font.family: "Ubuntu"
    font.pixelSize: 16
    
    • font 是一个分组属性,包含了字体设置。
    • font.family: "Ubuntu" 设置字体为 Ubuntu 字体。
    • font.pixelSize: 16 设置字体的大小为 16 像素。
  8. 键盘导航 (KeyNavigation)

    KeyNavigation.tab: thatLabel
    
    • KeyNavigation 是一个附加属性,用于处理键盘事件,例如焦点的移动。
    • KeyNavigation.tab: thatLabel 表示按下 Tab 键时,将焦点移到 thatLabel 元素。
  9. 信号处理程序 (onHeightChanged)

    onHeightChanged: console.log('height:', height)
    
    • onHeightChanged 是一个信号处理程序,当 Text 元素的 height 属性发生变化时会被触发。
    • 使用 console.log('height:', height) 打印当前的高度值,便于调试。
  10. 焦点管理 (focus)

    focus: true
    
    • focus: true 表示该元素有焦点,能够接收键盘输入。
    • focus 也用来控制文本颜色,如果当前元素有焦点,则文本为红色 (color: focus ? "red" : "black"),否则为黑色。
  11. 第二个 Text 元素 - thatLabel

    Text {
        id: thatLabel
        width: thisLabel.width
        height: thisLabel.height
        x: thisLabel.x + thisLabel.width + 20
        y: thisLabel.y
        ...
    }
    
    • 定义了另一个 Text 元素,标识符为 thatLabel
    • 它的宽度和高度与 thisLabel 相同,确保两个文本框大小一致。
    • 通过 x 设置,使 thatLabel 位于 thisLabel 的右侧,并有 20 像素的间距。
    • 该元素也有一个嵌套的 Rectangle,颜色设置为粉色 (color: "pink"),并位于文本的背后 (z: parent.z - 1)。
  12. 键盘焦点切换

    focus: !thisLabel.focus
    KeyNavigation.tab: thisLabel
    
    • focus: !thisLabel.focus 表示当 thisLabel 没有焦点时,thatLabel 会获得焦点。
    • 通过 KeyNavigation.tab 属性,按下 Tab 键可以将焦点切换回 thisLabel

需要注意的知识点

  1. 嵌套组件及相对布局

    • 代码中使用了嵌套的 Rectangle 元素作为背景,同时通过 anchors.fill: parent 来填满父组件。
    • 使用 xy 设置了元素的绝对位置,也可以考虑使用 anchors 来实现更灵活的相对布局,适应不同尺寸的窗口。
  2. 属性系统

    • propertyproperty alias 是 QML 中非常重要的概念,用于定义和引用属性。
    • property alias 可以让不同组件共享属性,方便数据的访问和管理。
  3. 键盘事件和焦点管理

    • KeyNavigationfocus 用于处理键盘焦点的切换。
    • 焦点管理在交互式界面设计中非常重要,确保用户可以通过键盘顺利地切换和控制元素。
  4. z 值控制元素层次

    • 使用 z 控制元素的前后显示顺序,z 值越大,元素越靠前显示。
    • 可以通过设置 z 值调整文本和背景矩形之间的显示关系。
  5. 动态文本和信号处理

    • 通过连接字符串的方式实现动态文本更新。
    • 信号处理器 (onHeightChanged) 用于监测属性的变化,这在调试和动态界面更新中非常有用。

这段代码展示了如何使用 QtQuick 实现一个具有动态属性、键盘导航、和简单动画效果的用户界面。掌握这些基础知识是创建复杂和交互式 QML 应用的关键。

import QtQuick

Rectangle {
    id: root
    width: 600
    height: 300

    Text {
        // (1) identifier
        id: thisLabel

        // 设置宽度和高度
        width: 150
        height: 100

        // (2) set x- and y-position
        x: 24
        y: 100

        Rectangle {
            anchors.fill: parent
            color: "yellow"
            z: parent.z - 1
        }

        // (4) custom property
        property int times: 24

        // (5) property alias
        property alias anotherTimes: thisLabel.times

        // (6) set text appended by value
        text: "thisLabel " + anotherTimes

        // (7) Font is a grouped property
        font.family: "Ubuntu"
        font.pixelSize: 16

        // (8) KeyNavigation is an attached property
        KeyNavigation.tab: thatLabel

        // (9) Signal handler for property changes
        onHeightChanged: console.log('height:', height)

        // Focus is needed to receive key events
        focus: true

        color: focus ? "red" : "black"
    }

    Text {
        id: thatLabel

        // 设置与 thisLabel 相同的宽度和高度
        width: thisLabel.width
        height: thisLabel.height

        // 设置位置在 thisLabel 右边,并有 20 像素的间距
        x: thisLabel.x + thisLabel.width + 20
        y: thisLabel.y

        Rectangle {
            anchors.fill: parent
            color: "pink"
            z: parent.z - 1
        }

        text: "thatLabel"
        font.family: "Ubuntu"
        font.pixelSize: 16
        focus: !thisLabel.focus
        KeyNavigation.tab: thisLabel
        color: focus ? "red" : "black"
    }
}

请添加图片描述

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

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

相关文章

SpringAOP学习文档

目录 一、概念二、示例代码三、切点1、execution2、within3、this4、target5、args6、annotation7、within8、target9、args10、组合切点表达式11、在Before注解中使用自定义的切入点表达式,以及切入点方法12、获取指定类型的真实对象 四、通知1、Around注解的通知方…

AI赋能,精准防控:AI智能分析网关V4人员徘徊算法的技术优势与应用场景

随着科技的飞速发展,视频监控系统在各个领域的应用越来越广泛,从公共安全到商业管理,再到交通监控等。AI智能分析网关V4作为新一代的视频分析设备,以其强大的智能分析能力和多样化的应用场景,成为市场关注的焦点。本文…

pytorch与卷积神经网络实战笔记

课程视频链接 CNN卷积神经网络算法原理 全神经网络的整体结构 输入层(x1, x2, x3…)->隐藏层(全连接)->输出层,整体就类似于一个函数,输入x,经过函数module(x)得到输出y的过程&#xf…

WPF常见容器全方位介绍

Windows Presentation Foundation (WPF) 是微软的一种用于构建Windows桌面应用程序的UI框架。WPF的布局系统基于容器,帮助开发者以灵活、响应的方式组织用户界面 (UI) 元素。本篇文章将详细介绍WPF中几种常见的容器,包括Grid、StackPanel、WrapPanel、Do…

SpringMVC源码-处理器适配器HandlerAdapter

因为定义controller的方式有三种,每种不同的方式调用的方法不同,尤其是注解修饰的 方法名是自定义的 因此需要通过适配器模式来调用方法执行 initStrategies进行适配器的初始化 处理器适配器一共有如下四种: org.springframework.web.servlet.Handl…

springboot系列--web相关知识探索五

一、前言 web相关知识探索四中研究了请求中所带的参数是如何映射到接口参数中的,也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索四中主要研究了复杂参数底层绑定原理。本次主要是研…

有效三⻆形的个数 05

有效三⻆形的个数 我写的 class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int sum0;for (int knums.length-1;k>1;k--) {int left0;int rightk-1;while(right>left) {if (nums[left]nums[right]>nums[k]) {sum(right-left);right--;…

QD1-P26、27、28 CSS 属性 文本

本节(P26、27、28 三合一)学习:CSS 文本属性。 ‍ 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p26 CSS(层叠样式表)中用于设置文本样式的属性有很多,以下是一些常用的文本属性: …

[数据结构]栈的实现与应用

文章目录 一、引言二、栈的基本概念1、栈是什么2、栈的实现方式对比3、函数栈帧 三、栈的实现1、结构体定义2、初始化3、销毁4、显示5、数据操作 四、分析栈1、优点2、缺点 五、总结1、练习题2、源代码 一、引言 栈,作为一种基础且重要的数据结构,在计算…

Mybatis高级查询-一对多查询

表介绍和表关系说明 新建以下4张表 tb_user:用户表 tb_order:订单表 tb_item:商品表 tb_orderdetail:订单详情表 【表关系】 1.tb_user和 tb_order表关系tb_user 《》 tb_order:一对多, 一个人可以下多…

Oracle漏洞修复 19.3 补丁包 升级为19.22

1.场景描述 上周末2024-10-12日,服务器扫出漏洞,希望及时修复。其中,oracle的漏洞清单如下,总结了下,基本都是 Oracle Database Server 的 19.3 版本到 19.20 版本和 21.3 版本到 21.11 版本存在安全漏洞,即版本问题。如: Oracle Database Server 安全漏洞(CVE-2023-22…

241013深度学习之GoogleLeNet

文章目录 1. GoogleLeNet2.Inception块3.googleLeNet模型4.训练模型4.1运行结果图 5.小结 1. GoogleLeNet 全称:含并行连接的网络 在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet (Szegedy et al., 2015)的网络架构大放异彩。 GoogLeNet吸收了N…

ZED相机的使用

ZED双目相机型号是ZED 2 立体相机(ZED2 Stereo Camera,Stereolabs , San Francisco, USA),其中还包括USB 3.0 数据线,以及一个迷你三脚架。 一、查看自己的cuda nvidia-smi # 查看显卡驱动信息 nvcc -V # 查看CUDA的…

C++——vector的了解与使用

目录 引言 vector容器的基本概念 1.功能 2.动态大小 3.动态扩展 vector的接口 1.vector的迭代器 2.vector的初始化与销毁 3.vector的容量操作 3.1 有效长度和容量大小 (1)使用示例 (2)扩容机制 3.2 有效长度和容量操作 (1)reserve (2)resize 4.vector的访问操作…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题,它可能由多种原因引起,以下是一些主要的因素: 不完全的软件卸载 在卸载程序时,如果相关的 DLL 文件没有被正确移除,可能会导致文件…

aarch64-linux-gnu-gcc交叉编译opencv移植到linuxaarch64上

所谓的将OpenCV移植到某个平台,就是用该平台对应的编译器将OpenCV源代码编译成so库 1.下载3.4.5opencv源码 解压 安装aarch64-linux-gnu-gcc 在执行 bash build-linux_RK3588.sh过程中,提示什么,装就行了。 装完之后 trolongtrolong-virtu…

机器学习的四大学派:符号主义学派、贝叶斯学派、连接主义学派与进化仿生学派

目录 前言1. 符号主义学派1.1 含义与理论基础1.2 特点1.3 应用 2. 贝叶斯学派2.1 含义与理论基础2.2 特点2.3 应用 3. 连接主义学派3.1 含义与理论基础3.2 特点3.3 应用 4. 进化仿生学派4.1 含义与理论基础4.2 特点4.3 应用 结语 前言 机器学习作为人工智能的核心技术之一&…

【AUTOSAR 基础软件】ComM模块详解(通信管理)

文章包含了AUTOSAR基础软件(BSW)中ComM模块相关的内容详解。本文从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解ComM这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的…

2.随机变量及其分布

第二章 随机变量及其分布 1. 随机变量及其分布 1.1 随机变量的定义 定义1.1 随机变量 ​ 定义在样本空间 Ω \Omega Ω上的实值函数 X X ( ω ) XX(\omega) XX(ω)称为随机变量,常用大写字母 X , Y , Z X,Y,Z X,Y,Z等表示随机变量,其取值用小写字母 x , y , z …

手写mybatis之返回Insert操作自增索引值

前言 技术的把控,往往都是体现在细节上! 如果说能用行,复制粘贴就能完成需求,出错了就手忙脚乱。那你一定不是一个高级开发,对很多的技术细节也都不了解。 目标 在前面所有的章节内容对 ORM 框架的实现中,其…