当前位置: 首页 > java >正文

QML开发:QML中的基本元素

文章目录

    • 一、概述
    • 二、可视化元素(Visual Elements)
      • 2.1 基础视觉元素(常用于布局和显示)
        • 2.1.1 元素 Item 的介绍和使用
        • 2.1.2 元素 Rectangle 的介绍和使用
        • 2.1.3 元素 Image 的介绍和使用
        • 2.1.4 元素 Text 的介绍和使用
      • 2.2 交互元素(用于接收用户操作)
        • 2.2.1 元素 MouseArea 介绍和使用
        • 2.2.2 元素 FocusScope的介绍和使用

一、概述

  在 QML 中,基本元素(Basic Elements) 是构建 UI 界面的核心组件。QML 采用声明式语法,通过这些元素定义界面结构、行为和交互。元素可以被分为可视化元素与非可视化元素。一个可视化元素(例如矩形框Rectangle)有着几何形状并且可以在屏幕上显示。一个非可视化元素(例如计时器Timer)提供了常用的功能,通常用于操作可视化元素。

二、可视化元素(Visual Elements)

2.1 基础视觉元素(常用于布局和显示)

在这里插入图片描述

2.1.1 元素 Item 的介绍和使用

  在 QML 中,Item 是最基础的可视元素之一,许多其他图形元素(如 Rectangle、Image、Text 等)都直接或间接继承自 Item。它本身不绘制任何内容,但可以用于组织、布局和管理子项。

基本介绍:

Item {id: rootItemwidth: 200height: 100
}
  • Item 代表一个矩形区域,它本身不可见。
  • 可以包含子元素,是容器型组件。
  • 具有基本的坐标属性(x, y, width, height,anchors 等)。
  • 常用于组合多个组件或布局结构中。

常用属性:
在这里插入图片描述
常见用途:
用作容器,组织子元素

Item {width: 300; height: 100Rectangle {width: 100; height: 100; color: "red"}Rectangle {x: 120width: 100; height: 100; color: "blue"}
}

用于布局锚定

Item {width: 200; height: 200Rectangle {width: 50; height: 50; color: "green"anchors.centerIn: parent}
}

示例演示:

import QtQuick 2.15
import QtQuick.Window 2.15Window {width: 400height: 300visible: truetitle: qsTr("Item 示例")// Item 是一个无可视外观的容器Item {id: containerwidth: 300height: 200anchors.centerIn: parent// 第一个子元素Rectangle {width: 100height: 100color: "lightblue"x: 0y: 0}// 第二个子元素Rectangle {width: 100height: 100color: "lightgreen"x: 120y: 50}}
}

效果如下:
在这里插入图片描述

2.1.2 元素 Rectangle 的介绍和使用

  Rectangle 是 QML 中最常用的可视化元素之一,用于绘制一个矩形区域。它可以设置颜色、大小、圆角、边框、渐变、阴影等属性,常用于 UI 中的背景、按钮、面板等组件。

基本语法:

Rectangle {width: 200height: 100color: "lightblue"
}

常用属性说明:
在这里插入图片描述
示例 1:简单矩形

Rectangle {width: 150height: 80color: "orange"
}

示例 2:带边框和圆角

Rectangle {width: 200height: 100color: "white"radius: 10border.color: "black"border.width: 2
}

示例 3:渐变背景

Rectangle {width: 200height: 100gradient: Gradient {GradientStop { position: 0.0; color: "red" }GradientStop { position: 1.0; color: "yellow" }}
}

示例 4:响应点击

Rectangle {width: 100height: 100color: "lightgray"MouseArea {anchors.fill: parentonClicked: {parent.color = "green"}}
}
2.1.3 元素 Image 的介绍和使用

  Image 是 QML 中用于显示图像的元素。它继承自 Item,可以加载本地图片或网络图片,支持缩放、填充模式、异步加载、缓存等功能。

基本语法:

Image {source: "my_picture.png"width: 100height: 100
}

常用属性:
在这里插入图片描述
fillMode 填充模式:
在这里插入图片描述
示例 1:加载本地图片

Image {source: "qrc:/images/logo.png"width: 100height: 100fillMode: Image.PreserveAspectFit
}

示例 2:加载网络图片

Image {source: "https://example.com/image.jpg"asynchronous: truecache: truewidth: 200height: 150
}

示例 4:点击更换图片

Image {id: dynamicImagesource: "img1.png"width: 100height: 100MouseArea {anchors.fill: parentonClicked: {dynamicImage.source = "img2.png"}}
}
2.1.4 元素 Text 的介绍和使用

在 QML 中,Text 元素用于显示一段文本,是最基本的文字展示组件,具有强大的排版和样式能力。

基本语法:

Text {text: "Hello, QML!"font.pixelSize: 20color: "black"
}

常用属性:
在这里插入图片描述
wrapMode 换行模式:
在这里插入图片描述
示例一:显示带样式的文本

Text {text: "欢迎使用 QML!"color: "#1684DF"font.pixelSize: 24font.bold: trueanchors.centerIn: parent
}

示例二:多行文本 + 自动换行

Text {text: "这是一段很长的文本,用于测试自动换行是否有效。"width: 200wrapMode: Text.Wrap
}

示例三:超出省略显示(elide)

Text {text: "这是一个超出显示宽度的文本"width: 150elide: Text.ElideRight
}

示例四:HTML 文本支持

Text {text: "<b>加粗</b> <i>斜体</i> <font color='red'>红色</font>"textFormat: Text.RichText
}

示例五:点击文本实现交互

Text {id: clickableTexttext: "点击我"color: "blue"MouseArea {anchors.fill: parentonClicked: {clickableText.text = "你点击了我!"}}
}

2.2 交互元素(用于接收用户操作)

在这里插入图片描述

2.2.1 元素 MouseArea 介绍和使用

在 QML 中,MouseArea 是一个 用于处理鼠标交互的基础元素,常用于响应点击、按下、释放、移动等事件。

基本语法:

MouseArea {anchors.fill: parent   // 鼠标区域覆盖整个父项onClicked: {console.log("鼠标被点击了")}
}

常用属性说明:
在这里插入图片描述

常用信号(事件):
在这里插入图片描述
示例:点击改变颜色

Rectangle {width: 200; height: 200color: "lightblue"MouseArea {anchors.fill: parentonClicked: {parent.color = "lightgreen"console.log("点击了矩形")}}
}

示例:悬停改变鼠标样式

Rectangle {width: 100; height: 100; color: "lightgray"MouseArea {anchors.fill: parenthoverEnabled: truecursorShape: Qt.PointingHandCursoronEntered: console.log("鼠标进入区域")onExited: console.log("鼠标离开区域")}
}

示例:获取鼠标位置

MouseArea {anchors.fill: parentonPositionChanged: {console.log("鼠标位置:", mouse.x, mouse.y)}
}
2.2.2 元素 FocusScope的介绍和使用

  在 QML 中,FocusScope 是一个 专门用于组织焦点(Focus)管理的容器元素。当你在组件中有多个可以获取焦点的子项时,使用 FocusScope 可以更清晰地控制哪个子控件获取焦点,避免焦点混乱。FocusScope 继承自 Item,本身不会获得焦点,但它能确保它内部的某个元素获得焦点时,焦点不会被传递到 FocusScope 外部。

基本语法:

FocusScope {Rectangle {width: 200; height: 40; color: "lightblue"TextInput {id: input1anchors.centerIn: parentfocus: true  // 初始获得焦点}}
}

示例1:多个输入框

FocusScope {width: 300; height: 100Column {spacing: 10TextInput {id: input1width: 200; height: 30placeholderText: "输入框 1"focus: true}TextInput {id: input2width: 200; height: 30`在这里插入代码片`placeholderText: "输入框 2"}}
}

说明:这个 FocusScope 确保焦点不会传递到它之外,而是在 input1 和 input2 内部管理。

示例2:在组件中封装 FocusScope

// MyInputField.qml
FocusScope {width: 200; height: 40Rectangle {anchors.fill: parentcolor: "white"; border.color: "gray"TextInput {id: inputanchors.fill: parentanchors.margins: 4focus: true}}
}
// main.qml
Column {spacing: 20MyInputField {}MyInputField {}
}

说明:即使你复用了 MyInputField,FocusScope 也能确保每个组件内部焦点独立。

注意事项:

  • 不能仅靠 focus: true 管理多个控件焦点,需要用 FocusScope 做容器。
  • 使用 Keys.onPressed 等键盘事件时,焦点必须在某个 focus: true 的控件上。
  • 一个组件内部只能有一个主动获取焦点的控件,多个控件都设置 focus: true 会导致焦点冲突。
http://www.xdnf.cn/news/17189.html

相关文章:

  • 项目设计模式草稿纸
  • Docker概述
  • chromedp 笔记
  • Prometheus监控学习-安装
  • LeetCode 112. 路径总和解题思路详解(BFS算法深入理解)
  • pipeline方法关系抽取--课堂笔记
  • SpringBoot AI心理学训练实战
  • 《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线
  • FastAPI快速入门P2:与SpringBoot比较
  • Google AI 发布 MLE-STAR:一款能够自动执行各种 AI 任务的先进机器学习工程代理
  • 使标签垂直水平居中的多种方法
  • C#案例实战
  • 利用Coze平台生成测试用例
  • 基于vscode连接服务器实现远程开发
  • HTML总结全览
  • Go 单元测试:如何只运行某个测试函数(精确控制)
  • 【前端】网站favicon图标制作
  • Kubernetes 已弃用 `apps/v1beta1` 版本的 StatefulSet
  • @【JCIDS】【需求论证】联合能力集成与开发系统知识图谱
  • [数组]977.有序数组的平方;209.长度最小的子数组
  • 跨越系统孤岛:4A架构如何实现企业级一体化协同
  • 深度解析 TCP 三次握手与四次挥手:从原理到 HTTP/HTTPS 的应用
  • 【AI论文】iLRM:一种迭代式大型3D重建模型
  • Vue3视频播放组件自定义封装、控制是否自动播放、全屏小屏控制、loading加载、静音播放等样式完全自定义控制,代码复制即用
  • JAVA学习笔记 自增与自减的使用-006
  • uniapp转app时,cover-view的坑
  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 基于k8s环境下的pulsar常用命令(下)
  • 创维智能融合终端SK-M424_S905L3芯片_2+8G_安卓9_线刷固件包
  • 计算机网络:目的网络在路由表项中的作用