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

news2024/12/23 22:21:06

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. 结论

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

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

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

相关文章

外汇天眼:CySEC与NAGA Markets Europe达成15万欧元的和解

塞浦路斯证券交易委员会&#xff08;CySEC&#xff09;已经与NAGA Markets Europe达成15万欧元的和解。有关监管决定的会议于2023年3月举行&#xff0c;然而直到今天才公布这个决定。 该和解符合2009年塞浦路斯证券交易委员会法第37(4)条的规定&#xff0c;该条赋予CySEC就任何…

FairGuard游戏加固产品常见问题解答

针对日常对接中&#xff0c;各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注&#xff0c;我们梳理了相关问题与解答&#xff0c;希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A&#xff1a;FairGuar…

用python实现调用海康SDK

海康威视&#xff08;Hikvision&#xff09;提供了Python SDK&#xff0c;用于与他们的摄像头和其他设备进行交互。为了使用这些SDK&#xff0c;首先需要在你的系统上安装海康威视的Python库。 下面是如何在Python中使用海康威视的SDK来调用摄像头的方法&#xff1a; python复…

车载 Android之 核心服务 - CarPropertyService 解析

重要类的源码文件名及位置&#xff1a; CarPropertyManager.java packages/services/Car/car-lib/src/android/car/hardware/property/ CarPropertyService.java packages/services/Car/service/src/com/android/car/ 类的介绍&#xff1a; CarPropertyManager&#xff1a…

从信号处理角度彻底理解FFT

只想速览公式可以转到简明FFT公式 一、FFT起初用于解决的问题 分解复合信号 将复合信号视为若干正弦波与余弦波的叠加&#xff0c;如何得知某个正弦波/余弦波在该信号中的强度&#xff1f; 二、即答 用特定频率的正弦波/余弦波&#xff08;设其为a&#xff09;乘上复合信号…

Linux的引导过程与服务控制

一.开机启动的完整过程 引导过程&#xff1a; 1.bios加电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 服务器主机开机以后&#xff0c;将根据主板BIOS中的设置对CPU、内存、显卡、键盘灯设备进行初步检测&#xff0c;检测成功后根…

一个JSON.parse的问题,让我丢掉了字节的 offer!

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。微信在文章底部&#xff0c;欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 在几年前的一次字节跳动面试中&#xff0c…

HelloWorld搭建(第一种模型)

1.创建Springboot项目并且引入依赖 <!-- 引入RabbitMQ的相关依赖 --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.7.2</version> </dependency> 2.第一种模式(直连…

企业生产安全指南,请点击文章查收!

随着科技的不断发展&#xff0c;视频监控系统在各个领域中扮演着越来越重要的角色。视频监控系统为企业和机构提供了强大的工具&#xff0c;以提高效率、增强安全性&#xff0c;并为决策制定提供实时数据支持。 客户案例 企业安全与生产管理 在现代企业环境中&#xff0c;保障…

产品|燕窝中的“秘密武器”——燕窝酸

前言 当提及燕窝&#xff0c;大部分人脑海中首先会闪过的大概是“宫廷圣品”、“名贵补品”等听上去十分高大上的形容词。然而随着现代人们生活水平的提高&#xff0c;燕窝已不再神秘&#xff0c;逐渐成为寻常百姓餐桌上的常见食品之一。据我国中医记载&#xff0c;燕窝具有养…

职场商务英语口语“自助餐”用英文怎么说?柯桥外语培训

“自助餐”用英语怎么说&#xff1f; ● 其实很简单&#xff0c;“自助餐”的英文就是&#xff1a;Buffet。 例句&#xff1a; At lunchtime, theres a choice between the buffet or the set menu.15857575376 午饭时&#xff0c;可以选择自助餐或套餐。 We are going to …

租赁小程序|北京租赁系统开发|租赁软件推动了行业发展

如今&#xff0c;租赁行业正在迅速发展&#xff0c;越来越多的商家和用户寻求更便捷、高效的租赁体验。租赁小程序作为一种科技创新的产物&#xff0c;为租赁行业带来了巨大的变革。本文将介绍租赁小程序的功能与特色&#xff0c;旨在让商家和用户更了解这一工具&#xff0c;为…

关于标准那些事——第六篇 四象之“朱雀”(要素的表述)

两仪生四象——东方青龙&#xff08;木&#xff09;、西方白虎&#xff08;金&#xff09;、南方朱雀&#xff08;火&#xff09;、北方玄武&#xff08;水&#xff09; 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 要素的表…

Unity ShaderGraph 技能冷却转圈效果

Unity ShaderGraph 技能冷却转圈效果 前言项目场景布置代码编写ShaderGraph 连线总结 参考 前言 遇到一个需求&#xff0c;要展示技能冷却的圆形遮罩效果。 项目 场景布置 代码编写 Shader核心的就两句 // 将uv坐标系的原点移到纹理中心 float2 uv i.uv - float2(0.5, 0…

基于Springboot+vue医院管理系统(前后端分离)

最近有一些读者问我有没有完整的基于SpringbootVue的项目源码&#xff0c;今天给大家整理了一下&#xff0c;无偿分享给大家。 功能&#xff1a; 医生信息管理 换着信息管理 挂号信息管理 药物信息管理 检查项目管理 病床信息管理 排班信息管理 数据统计分析 开发工具…

仓储物流RFID智能管理设计解决方案

一、项目概况 1、项目背景 在物流管理中&#xff0c;仓储管理是至关重要的环节&#xff0c;传统的仓储管理存在诸多问题&#xff0c;如进出库操作混乱、库存报告延迟、货品属性不清晰、堆放混乱、盘点不准确等&#xff0c;这些问题需要通过基于信息化管理的技术进行彻底改造。…

「Qt Widget中文示例指南」如何实现一个日历?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的CalendarWi…

开源MIT协议软件 - ChatGPT Admin Web

ChatGPT Admin Web 在团队和组织内共享使用人工智能的一站式解决方案。 ​编辑 ​编辑 ​编辑 CAW 是一个自托管网络应用程序&#xff0c;提供开箱即用的用户管理&#xff0c;包括后台界面以及可配置的支付计划和相关支付界面。 GitHub Sponsor / 爱发电 功能 Features …

React使用动态标签名称

最近在一项目里&#xff08;React antd&#xff09;遇到一个需求&#xff0c;某项基础信息里有个图标配置&#xff08;图标用的是antd的Icon组件&#xff09;&#xff0c;该项基础信息的图标信息修改后&#xff0c;存于后台数据库&#xff0c;后台数据库里存的是antd Icon组件…

【办公技巧】word文档怎么隐藏文字呢?word隐藏文字的四种方法!

Word文件制作完毕后&#xff0c;有些部分不想别让人看到&#xff0c;又不想删掉&#xff0c;把么我们可以隐藏文字&#xff0c;今天分享几个隐藏文字的方法给大家~ 方法一&#xff1a; 最简单的方法&#xff0c;将字体颜色与背景颜色设置为一致的&#xff0c;这样就达到了隐藏…