【Qt之Quick模块】7. Quick基础、常用组件Item、Rectangle、Text、TextInput、TextEdit等

1. 概述

Qt Quick模块是编写QML应用程序的标准库。Qt QML模块提供QML引擎和语言基础结构,Qt Quick模块提供用QML创建用户界面所需的所有基本类型。它提供了一个可视化画布,包括用于创建和动画化可视化组件、接收用户输入、创建数据模型和视图以及延迟对象实例化的类型。
Qt Quick模块提供了一个QML API(为用QML语言创建用户界面提供QML类型)和一个c++ API(用c++代码扩展QML应用程序)。
注意:一组基于Qt quick的UI控件也可用于创建用户界面。

1.1 使用Qcuick模块image.png

需在.pro文件中添加:

QT += quick

在所用的文件中导入以下代码:

import QtQuick

1.2 Quick 模块类关系图

image.png

2. 可视组件

2.1 Item

Item类型是Qt Quick中所有可视项目的基本类型。

Qt Quick中的所有可视项都继承自Item。尽管Item对象没有可视外观,但它定义了可视项目中常见的所有属性,例如x和y位置、宽度和高度、锚定和键处理支持。

2.1.1 Item作为容器

Item类型可用于将多个项分组到单个根下。例如:

 import QtQuick 2.0

 Item {
     Image {
         source: "tile.png"
     }
     Image {
         x: 80
         width: 100
         height: 100
         source: "tile.png"
     }
     Image {
         x: 190
         width: 100
         height: 100
         fillMode: Image.Tile
         source: "tile.png"
     }
 }

2.1.2 Item不透明度

    Item{
        Rectangle{
            // 设置透明度
            opacity: 0.5
            color: "lightgrey"
            width: 100
            height: 100
            border.color: "red"

            anchors.centerIn: root
            Rectangle{
                color: "blue"
                width: 100
                height: 100
                border.color: "blue"
            }
        }
    }

image.png

2.1.3 Item是否可见和启用

    Item{
        Rectangle{
            // 设置透明度
            opacity: 0.5
            color: "lightgrey"
            width: 100
            height: 100
            border.color: "red"
            Rectangle{
                color: "blue"
                width: 100
                height: 100
                border.color: "blue"
		// 是否可见
                visible: false
		// 是否启用
		enabled: false
            }
        }
    }

image.png

2.1.4 Item z轴堆叠顺序

Item有一个z属性,可以用来设置项的堆叠顺序
z相同,后面的在前面的上面
z大,在z小的上面

    Item{
        Rectangle{
            // 设置透明度
            z : 1
            opacity: 0.5
            color: "lightgrey"
            width: 100
            height: 100
            border.color: "red"

        }

        Rectangle{
            z : 0
            x: 50
            y: 50
            color: "blue"
            width: 100
            height: 100
            border.color: "blue"
        }
    }

image.png

2.1.5 Item 定位子项 和 坐标映射

Item有以下几个函数用于定位子项和坐标映射

  • childAt(real x, real y):定位第一个在(x, y)位置的可视子项
  • mapFromItem(Item item, real x, real y):将item的坐标转换为项目坐标
  • mapToItem(Item item, real x, real y):将item的项目坐标转换为item的坐标系统

2.2 Rectangle

矩形项用于用纯色或渐变填充区域,或提供矩形边框。颜色设置可以使用名称和"#000000"格式。
属性设置可以用属性组设置。

 import QtQuick 2.0

 Rectangle {
     width: 100
     height: 100
     color: "red"
     border.color: "black"
     border.width: 5
     radius: 10
 }

image.png

 Rectangle {
     color: "#00B000"
     width: 80; height: 80
 }

 Rectangle {
     color: "steelblue"
     y: 100; width: 80; height: 80
 }

image.png

2.3 Text

文本项可以显示纯文本和富文本。例如,具有特定字体和大小的红色文本可以这样定义:

 Text {
     text: "Hello World!"
     font.family: "Helvetica"
     font.pointSize: 24
     color: "red"
 }

或者

 Text {
     text: "<b>Hello</b> <i>World!</i>"
 }

image.png
image.png

2.3.1 隐藏超过长度的文本

如下,文本长度100,超过就隐藏左边

            Text {
                width: 100
                anchors.centerIn: parent
                text: "<b>Hello</b> <i>World!</i>"
                font.family: "Helvetica"
                font.pointSize: 24
                color: "red"
                elide: Text.ElideLeft
            }

image.png

2.3.2 换行

 Text {
                width: 100
                anchors.centerIn: parent
                text: "<b>Hello</b> <i>World!</i>"
                font.family: "Helvetica"
                font.pointSize: 24
                color: "red"
                // elide: Text.ElideLeft
                wrapMode: Text.WrapAnywhere
            }

image.png

2.3.3 裁剪

clip属性用于设置文本是否被裁剪

            Text {
                width: 100
                anchors.centerIn: parent
                text: "<b>Hello</b> <i>World!</i>"
                font.family: "Helvetica"
                font.pointSize: 24
                color: "red"
                // elide: Text.ElideLeft
                // wrapMode: Text.WrapAnywhere
                clip: true
            }

image.png

2.3.4 字体

使用font属性可对文本进行设置,用法:

font.xxx

如:

font.family: "Helvetica"
font.pointSize: 24

font可以设置bold、family、italic、pixelSize、pointSize、underline等属性。

2.3.5 对齐方式

属性horizontalAlignment 和属性verticalAlignment设置对齐方式

            Text {
                width: parent.width
                height: parent.height
                text: "<b>Hello</b> <i>World!</i>"
                font.family: "Helvetica"
                font.pointSize: 11
                color: "red"
                // elide: Text.ElideLeft
                // wrapMode: Text.WrapAnywhere
                // clip: true
                horizontalAlignment : Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
            }

image.png

2.3.6 文本样式

使用style属性设置文本样式

            Text {
                width: parent.width
                height: parent.height
                text: "<b>Hello</b> <i>World!</i>"
                font.family: "Helvetica"
                font.pointSize: 11
                color: "red"
                // elide: Text.ElideLeft
                // wrapMode: Text.WrapAnywhere
                // clip: true
                horizontalAlignment : Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                style: Text.Outline
            }

image.png

2.4 TextInput

TextInput显示一行可编辑的纯文本。

TextInput用于接受一行文本输入。输入约束可以放在TextInput项上(例如,通过验证器或inputMask),并且将echoMode设置为适当的值可以将TextInput用于密码输入字段。

2.4.1 使用验证器

    TextInput{
        width: parent.width
        height: parent.height
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        validator: IntValidator{bottom: 1; top: 99;}

        //text: "只能输入1-99的数字."
    }

2.4.2 使用掩码

    TextInput{
        width: parent.width
        height: parent.height
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        // validator: IntValidator{bottom: 1; top: 99;}
        inputMask: ">AA_999_a"
        //text: "只能输入1-99的数字."

    }

2.4.3 回显方式

echoMode属性指定了TextInput文本显示方式:

枚举描述
QLineEdit::Normal0默认方式,直接显示文本
QLineEdit::NoEcho1不显示输入内容
QLineEdit::Password2以密码掩码字符替换文本
QLineEdit::PasswordEchoOnEdit3输入时显示文本,但输入完显示密码掩码字符
    TextInput{
        width: parent.width
        height: parent.height
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        validator: IntValidator{bottom: 1; top: 99;}
        echoMode: TextInput.Password
        // inputMask: ">AA_999_a"
        //text: "只能输入1-99的数字."
        onEditingFinished: console.log(text)
    }

2.4.4 信号处理器

TextInput提供了两个输入完成的信号处理器,onAccepted()和onEditingFinished()。他们都会在按下回车时触发,区别是后者失去焦点也会触发。
TextInput也提供了一个onTextEdited()的信号处理器,当内容编辑时触发。

2.4.5 文本选取

selectByMouse属性设置使用鼠标选择TextInput中的文本。

  • selectByMouse: bool
    默认为false。
    如果为true,则用户可以使用鼠标以某种特定于平台的方式选择文本。
  • selectedText: string
    此只读属性提供当前在文本输入中选择的文本。
  • selectedTextColor: color
    突出显示文本的颜色,用于选择。
  • selectionColor: color
    用于选择的文本突出显示背景颜色。
  • selectionEnd: int
    当前选择中最后一个字符后的光标位置。
    此属性是只读的。要更改选择,请使用select(start,end),selectAll()或selectWord()。
  • selectionStart: int
    当前选择中第一个字符之前的光标位置。
    此属性是只读的。要更改选择,请使用select(start,end),selectAll()或selectWord()。
    TextInput{
        width: parent.width
        height: parent.height
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        validator: IntValidator{bottom: 1; top: 99999999;}
        //echoMode: TextInput.Password
        // inputMask: ">AA_999_a"
        //text: "只能输入1-99的数字."
        onEditingFinished: console.log(text)

        selectByMouse: true
        mouseSelectionMode: TextInput.SelectWords
        selectionColor: "lightgrey"
        selectedTextColor: "red"
    }

image.png

2.4.6 外观

TextInput默认没有外观,都不知道光标在哪儿,所以需要自己实现自定义组件,比如,在一个Rectangle内添加一个TextInput组件。或者实现别的已经实现的组件库,如TextField组件

    Rectangle{
        width: 300
        height: 50
        border.color: "blue"
        anchors.centerIn: parent
        TextInput{
            anchors.fill: parent
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            validator: IntValidator{bottom: 1; top: 99999999;}
            //echoMode: TextInput.Password
            // inputMask: ">AA_999_a"
            //text: "只能输入1-99的数字."
            onEditingFinished: console.log(text)

            selectByMouse: true
            mouseSelectionMode: TextInput.SelectWords
            selectionColor: "lightgrey"
            selectedTextColor: "red"
        }
    }

image.png

2.5 TextEdit

TextEdit组件显示一个可编辑的格式化文本块,和TextInput相比,那个是单行的,这个是多行的。属性用法基本一样
它可以显示纯文本和富文本。例如:

 TextEdit {
     width: 240
     text: "<b>Hello</b> <i>World!</i>"
     font.family: "Helvetica"
     font.pointSize: 20
     color: "blue"
     focus: true
 }

image.png
将focus属性设置为true使TextEdit组件能够接收键盘焦点。
请注意,TextEdit不实现滚动、跟随光标或特定于外观的其他行为。一般会使用Flickable元素提供移动、实现光标跟随:

 Flickable {
      id: flick

      width: 300; height: 200;
      contentWidth: edit.contentWidth
      contentHeight: edit.contentHeight
      clip: true

      function ensureVisible(r)
      {
          if (contentX >= r.x)
              contentX = r.x;
          else if (contentX+width <= r.x+r.width)
              contentX = r.x+r.width-width;
          if (contentY >= r.y)
              contentY = r.y;
          else if (contentY+height <= r.y+r.height)
              contentY = r.y+r.height-height;
      }

      TextEdit {
          id: edit
          width: flick.width
          focus: true
          wrapMode: TextEdit.Wrap
          onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
      }
  }

3. 结论

且听且忘且随风,且行且看且从容

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

静态网页设计——海贼王

前言 使用前端经典三件套HTMLCSSJS实现的海贼王静态网页课程设计&#xff0c;适合我们的童年&#xff01; 主要内容 首页 首页最上方有一个轮播图&#xff0c;可以自动切换图片&#xff0c;使用js实现。 轮播图往下&#xff0c;就是列出一些比较经典的海贼王影片&#xf…

2023年度最热 AI 应用 TOP 50,除了 ChatGPT 还有这么多宝藏

原文章链接&#xff1a;年度最热 AI 应用 TOP 50&#xff0c;除了 ChatGPT 还有这么多宝藏 - IT之家 更多消息&#xff1a;AI人工智能行业动态&#xff0c;aigc应用领域资讯 在 AI 工具激烈竞争的一年中&#xff0c;尽管ChatGPT在访问量上遥遥领先&#xff0c;但单次使用时长未…

Python之字符编码汇总

一、常见编码 ASCII&#xff1a;ASCII码即美国标准信息交换码(American Standard Code for Information Interchange)。由于计算机内部所有信息最终都是一个二进制值&#xff0c;而每一个二进制位&#xff08;bit&#xff09;有0和1两种状态&#xff0c;因此八个二进制位就可以…

gookit/color - Go语言命令行色彩使用库教程

gookit/color - Go语言命令行色彩使用库教程 1.安装2.基础颜色(16-color)3.256色彩/RGB风格 1.安装 go get github.com/gookit/color2.基础颜色(16-color) 提供通用的API方法&#xff1a;Print Printf Println Sprint Sprintf 1、例如&#xff1a; color.Yellow.Println(&q…

centos7 ping不通域名

如果ip能ping通&#xff0c;ping不通域名可以试试以下操作&#xff1a; 1.编辑resolv.conf文件 vi /etc/resolv.conf 添加 nameserver 8.8.8.8 2.编辑nsswitch.conf vi /etc/nsswitch.conf 改成下图所示&#xff1a; 3.编辑sysctl.conf vi /etc/sysctl.conf 加上两行内…

macOS跨进程通信: FIFO(有名管道) 创建实例

一&#xff1a; 简介 在类linux系统中管道分为有名管道和匿名管道。两者都能单方向的跨进程通信。 匿名管道&#xff08;pipe&#xff09;: 必须是父子进程之间&#xff0c;而且子进程只能由父进程fork() 出来的&#xff0c;才能继承父进程的管道句柄&#xff0c;一般mac 开发…

1分钟生成爆款风景视频,Stable Video Diffusion最简教程

AI视频是2024年的重头戏&#xff0c;各大AI厂商都在跑视频技术&#xff0c;快速推出更牛的黑科技&#xff0c;SD其实在11月底就出了一款官方视频大模型-SVD&#xff0c;来跟runway、pika抢这块大蛋糕。 之前生成的视频效果还不是很理想&#xff0c;远没runway效果好&#xff0c…

【Mybatis】深入学习MyBatis:高级特性与Spring整合

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 高级特性 1 一级缓存和二级缓存 一级缓存 二级缓存 2 延迟加载 5 整合Spring 1 MyBatis-Spring模块 2 事务管理 结…

如何在Windows安装Wnmp服务并实现固定地址远程访问

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…

无辅源电压继电器 RWY-D2/3 180-440VAC 导轨安装 josef约瑟

RWY-D1型电压继电器&#xff1b; RWY-D2型电压继电器&#xff1b; 一、 概述 RWY-D系列电压继电器&#xff08;以下简称本继电器&#xff09;用于发电机、变压器和输电线的电器保护装置中&#xff0c;作为过电压保护或低电压闭锁的启动原件。本继电器为集成电路静态型继电器…

用户管理第2节课 -- idea 2023.2 创建表--鱼皮

二、【先确定idea版本&鱼皮是否一致&#xff0c;再决定看不看这行】建表 2.1 idea 里连接数据库&#xff0c;通过可视化建表 2.1.1 清空表中数据 的 命令 truncate 清空 2.1.2 先输入删除表&#xff0c;的命令&#xff0c;再选中这行命令&#xff0c;执行&#xff0c;…

Linux学习之系统编程2(关于进程及其相关的函数)

写在前面&#xff1a; 我的Linux的学习之路非常坎坷。第一次学习Linux是在大一下的开学没多久&#xff0c;结果因为不会安装VMware就无疾而终了&#xff0c;可以说是没开始就失败了。第二次学习Linux是在大一下快放暑假&#xff08;那个时候刚刚过完考试周&#xff09;&#xf…

k8s快速搭建

VMware16Pro虚拟机安装教程VMware16.1.2安装及各版本密钥CentOS7.4的安装包:提取码&#xff1a;lp6qVMware搭建Centos7虚拟机教程 搭建完一个镜像 关机 拍摄一个快照,克隆两个作为子节点 0. 环境准备 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#…

实验三-HBase数据库操作

第一步&#xff1a;首先登陆ssh&#xff0c;之前设置了无密码登陆&#xff0c;因此这里不需要密码&#xff1b;再切换目录至/usr/local/hadoop &#xff1b;再启动hadoop ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh 输入命令jps&#xff0c;能看到NameNode,Data…

环境准备-VMware安装

照顾到很多人不是很会环境搭建,我这里会将搭建的步骤讲的细致点 第一步,VMware下载。目的是通过VMware搭建Linux服务器,因为大家大部分还是Windows的电脑,我们先下载虚拟机搭建一个Linux系统的服务器 下载完成之后,点击安装,如下: 点击“下一步” 勾选“我接受许可协议…

算法导论复习——CHP24 单源最短路

单源最短路径问题&#xff1a; 给定一个图G (V,E)&#xff0c;找出从给定的源点s∈V到其它每个结点v∈V的最短路径。 这样最短路径具有最优子结构性&#xff1a;两个结点之间的最短路径的任何子路径都是最短的。 基本概念 负权边&#xff1a;权重为负值的边称为负权重的边。 如…

AI计算,为什么要用GPU?

今天这篇文章&#xff0c;我们继续来聊聊芯片。 在之前的文章里&#xff0c;小枣君说过&#xff0c;行业里通常会把半导体芯片分为数字芯片和模拟芯片。其中&#xff0c;数字芯片的市场规模占比较大&#xff0c;达到70%左右。 数字芯片&#xff0c;还可以进一步细分&#xff0…

工具分享:有哪些开源知识库可以使用?

导语&#xff1a; 在信息爆炸的时代&#xff0c;我们常常需要从各种渠道获取知识和解决问题。开源知识库为我们提供了一个便捷的途径&#xff0c;让我们可以轻松地分享和获取知识。本文将介绍5个开源知识库&#xff0c;其中包括HelpLook&#xff0c;帮助你更好地解决问题。 1…

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务&#xff0c;管理起来非常简单&#xff0c;但…

8个超高清图片素材网站,免费下载,真的很实用~

图片真的是我们日常生活中必不可少的一部分&#xff0c;大到工作&#xff0c;小到发朋友圈都需要配图&#xff0c;那除了自己拍摄之外&#xff0c;哪里还能找到精美又高清的图片素材呢&#xff1f;本期就给大家整理了8个可免费下载的图片素材网站&#xff0c;真的免费下载&…