QML ToolButton与DelayButton的使用、详解与自定义样式
QML MenuBarItem与MenuItem的使用、详解与自定义样式
- 一、介绍
- 1、ToolButton
- 常见用法
- 基础示例
- 设置图标
- 常用属性
- `text`
- `icon`
- `enabled`
- `shortcut`
- `checkable` & `checked`
- 信号
- `onClicked`
- `onPressed` 和 `onReleased`
- 样式和外观
- 使用场景
- 2、DelayButton
- 使用场景
- 核心属性
- 1. `delay`
- 核心信号
- 1. `onActivated`
- 2. `onCanceled`
- 可用方法
- `reset()`
- 结合图标使用
- 提示用户延迟中的状态
- 样式自定义
- 二、效果查看
- 三、源码分享
一、介绍
1、ToolButton
- 在 QML(Qt Markup Language)中,
ToolButton是一个提供工具按钮功能的控件,通常用于实现紧凑且功能性强的小型按钮,适用于工具栏或类似的用户界面场景。ToolButton是AbstractButton的一个子类,因此它继承了很多基本按钮的特性,比如点击事件处理、启用状态、图标等。 ToolButton和Button的主要区别是它更轻量级,样式更简单,同时常常用于呈现一个图标或与工具相关的操作。
常见用法
以下是 ToolButton 的一些核心特性及其用法:
基础示例
import QtQuick 2.15
import QtQuick.Controls 2.15ToolButton {text: "Click Me"onClicked: console.log("ToolButton Clicked!")
}
设置图标
ToolButton 通常用于显示图标按钮,你可以通过 icon 属性来设置图标。
import QtQuick 2.15
import QtQuick.Controls 2.15ToolButton {icon.source: "icons/tools.png"text: "Tools"onClicked: console.log("ToolButton with icon clicked!")
}
常用属性
text
按钮上的文字,与 icon 一起显示时可以作为补充信息。
icon
指定按钮的图标,可以是一个 Image 资源。例如:
icon.source: "path_to_icon.png"
enabled
控制按钮是否可用。
ToolButton {text: "Disabled Button"enabled: false
}
shortcut
为按钮设置一个键盘快捷方式。
ToolButton {text: "Save"shortcut: "Ctrl+S"onClicked: console.log("Save clicked!")
}
checkable & checked
checkable:设置为true时,按钮可被切换到选中状态。checked:指示该按钮是否处于选中状态。
ToolButton {text: "Toggle"checkable: truechecked: trueonCheckedChanged: console.log("Checked:", checked)
}
信号
onClicked
当按钮被点击时触发。
ToolButton {text: "Click Me"onClicked: console.log("Button Clicked!")
}
onPressed 和 onReleased
onPressed:当按钮被按下时触发。onReleased:当按钮被释放时触发。
ToolButton {text: "Press Me"onPressed: console.log("Button Pressed!")onReleased: console.log("Button Released!")
}
样式和外观
ToolButton 的样式可以由 Style 控制,具体的个性化样式取决于应用的底层样式引擎(如 Material、Fusion 等)。在 Qt Quick Controls 2 中,使用 ToolButton 时,你可以通过设置 Control 的 background, foreground 等属性自定义外观。
ToolButton {text: "Custom Look"background: Rectangle {color: "blue"radius: 8}
}
使用场景
- 工具栏中的图标按钮。
- 小型、紧凑的按钮界面。
- 用于触发快速操作而不占用太多 UI 空间。
2、DelayButton
- 在 QML 中,
DelayButton是一个特殊的按钮控件,它的主要特点是需要等待一段时间(延迟)才能触发点击事件。这种按钮通常用在需要用户确认的场景,例如敏感操作(删除、重置、提交等),避免误操作。 DelayButton是AbstractButton的派生类,因此继承了标准按钮的功能,比如点击、启用状态、图标等,同时增加了一个延时确认功能。
使用场景
DelayButton 非常适合以下场景:
- 防止误触发重要操作,如删除或重置。
- 需要用户确认时间的操作。
- 表达某种用户需要等待的意图,比如计时器或者安全倒计时。
核心属性
1. delay
- 类型: int
- 描述: 按钮的延迟时间,单位为毫秒。
- 默认值: 2500 (2.5 秒)
- 作用: 指定触发点击事件需要按住按钮的时间长度。在这段时间内,如果用户未保持按下状态,将不会触发点击事件。
DelayButton {text: "Confirm Action"delay: 5000 // 延迟 5 秒
}
核心信号
1. onActivated
- 当延迟时间完成后且操作成功时触发。
DelayButton {text: "Reset Settings"delay: 4000onActivated: {console.log("Settings reset!")}
}
2. onCanceled
- 如果用户中途松开按钮或未达到延迟时间,则会触发
onCanceled信号,表示操作被取消。
DelayButton {text: "Cancel Action"delay: 3000onCanceled: console.log("Action canceled!")
}
可用方法
reset()
- 作用:重置按钮的延迟计时器,使其需要从头重新计时。
DelayButton {text: "Restart Countdown"delay: 3000onTriggered: {console.log("Countdown finished!")}MouseArea {anchors.fill: parentonClicked: parent.reset()}
}
结合图标使用
你可以通过 icon 属性为 DelayButton 设置一个图标,提供更好的用户交互提示。
DelayButton {icon.source: "icons/delete.png"text: "Delete"delay: 3000onTriggered: console.log("Deleted!")
}
提示用户延迟中的状态
你可以使用 progress 属性显示当前延迟的完成百分比,比如用外部的 ProgressBar 结合 DelayButton 显示进度状态。
以下是示例代码:
Column {DelayButton {id: delayButtontext: "Submit"delay: 5000onTriggered: console.log("Action executed!")onCanceled: console.log("Action canceled!")}ProgressBar {value: delayButton.progressfrom: 0to: 1}
}
样式自定义
DelayButton 的外观可以自定义(例如通过 background 属性):
DelayButton {text: "Delay Action"delay: 3000background: Rectangle {implicitWidth: 100implicitHeight: 40color: delayButton.pressed ? "lightsteelblue" : "steelblue"radius: 8}
}
二、效果查看

三、源码分享
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Controls.Basic
import QtQuick.Dialogs
import CommunicationThreadApplicationWindow {id:windowwidth: 1300height: 850visible: truetitle: qsTr("Hello World")header: ToolBar{height: 55RowLayout{anchors.fill: parentToolButton{id:btnExportimplicitWidth: 60implicitHeight: 55text:"导出报表"icon.source:"qrc:/image/image/wait.svg"icon.width:32icon.height:32action:Action{shortcut: StandardKey.CopyonTriggered: console.log("onTriggered")}background: Rectangle{color:btnExport.pressed?"lightblue":btnExport.hovered?"dodgerblue":"steelblue"radius: 5}contentItem: Item {Column{Image {width: parent.parent.parent.icon.widthheight: parent.parent.parent.icon.heightsource:parent.parent.parent.icon.sourceanchors.horizontalCenter: parent.horizontalCenter}Text{text:parent.parent.parent.textanchors.horizontalCenter: parent.horizontalCentercolor: btnExport.pressed?"white":"black"}}}onClicked: {console.log("click")}}}}DelayButton{id:btnDelaywidth: 200height: 100text: "DelayButton"delay:2000background: Rectangle{color:btnDelay.pressed?"steelblue":btnDelay.hovered?"dodgerblue":"lightblue"radius:10}contentItem: Item{Text{anchors.fill: parenttext:parent.parent.textcolor: parent.parent.progress===1?"white":"black"verticalAlignment: Text.AlignVCenterhorizontalAlignment: Text.AlignHCenter}}indicator: Rectangle{height: parent.heightwidth: parent.width*parent.progresscolor:"#aa000000"radius:10}onClicked: {console.log("DelayButton")}onActivated: {console.log("DelayButton onActivated")}}
}相关文章:
QML ToolButton与DelayButton的使用、详解与自定义样式
QML MenuBarItem与MenuItem的使用、详解与自定义样式 一、介绍1、ToolButton常见用法基础示例设置图标 常用属性texticonenabledshortcutcheckable & checked 信号onClickedonPressed 和 onReleased 样式和外观使用场景 2、DelayButton使用场景核心属性1. delay 核心信号1.…...
数据结构:动态数组vector
vector 是 C 标准库的动态数组。 在C语言中一般初学者会使用malloc,int[n]等方式来创建静态数组,但是这种方式繁琐且容易出错。我们做算法题一般使用动态数组vector, 并且在刷题网站的题目给的输入一般也是vector类型。 示例:vect…...
JSON格式,C语言自己实现,以及直接调用库函数(一)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下为你提供不同场景下常见的 JSON 格式示例。 1. 简单对象 JSON 对象是由键值对组成,用花括号 {} 包裹&…...
学习整理安装php的uuid扩展以及uuid调用方法
学习整理安装php的uuid扩展以及uuid调用方法 1、安装uuid依赖库2、下载并安装3、ini中添加扩展4、re2c版本报错5、uuid调用方法 1、安装uuid依赖库 yum -y install uuid uuid-devel e2fsprogs-devel libuuid-devel2、下载并安装 点我下载uuid安装包 wget http://pecl.php.ne…...
Elasticsearch实战应用:从“搜索小白”到“数据侦探”的进阶之路
引言:Elasticsearch——数据世界的“福尔摩斯” 大家好,今天我们要聊的是一个在数据世界中扮演“福尔摩斯”角色的工具——Elasticsearch。如果你曾经为海量数据的搜索和分析头疼不已,那Elasticsearch就是你的救星!它不仅能帮你快…...
Orange 单体架构 - 快速启动
1 后端服务 1.1 基础设施 组件说明版本MySQLMySQL数据库服务5.7/8JavaJava17redis-stackRedis向量数据库最新版本Node安装Node22.11.0 1.2 orange-dependencies-parent 项目Maven依赖版本管理 1.2.1 项目克隆 GitHub git clone https://github.com/hengzq/orange-depende…...
Spring Boot 入门 与 无法解析符号 springframework 的解决
Spring Boot 入门的关键步骤 1 创建 Maven 工程 操作目的: 通过 Maven 工程来管理项目依赖,Spring Boot 本身就依赖 Maven 或 Gradle 来简化依赖管理。 操作方法: 打开 IDEA(IntelliJ IDEA)。点击 New Project&#…...
3D模型在线转换工具:轻松实现3DM转OBJ
3D模型在线转换是一款功能强大的在线工具,支持多种3D模型格式的在线预览和互转。无论是工业设计、建筑设计,还是数字艺术领域,这款工具都能满足您的需求。 3DM与OBJ格式简介 3DM格式:3DM是一种广泛应用于三维建模的文件格式&…...
java中双亲委派详解
什么是双亲委派机制? 双亲委派机制(Parent Delegation Model)是Java类加载器(ClassLoader)加载类时的一种策略。它的核心思想是:当一个类加载器收到加载类的请求时,不会立即自己加载࿰…...
【Python爬虫(27)】探索数据可视化的魔法世界
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
网络安全-js安全知识点与XSS常用payloads
简介 JavaScript 是一种轻量级的编程语言,定义了HTML的行为。它与Java的关系类似周杰和周杰伦的关系(即没有关系)。 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间。 脚本可被放置在 HTML 页面的 <body>…...
ip属地是电话号码吗怎么改
在数字化时代,IP属地作为网络身份的一部分,对于许多互联网用户来说并不陌生。然而,关于IP属地的具体含义以及如何更改它,却常常让一些用户感到困惑。特别是当提到IP属地与电话号码之间的关系时,更是容易让人产生误解。…...
Ubuntu中使用yum命令出现错误提示:Command ‘yum‘ not found
Ubuntu中使用yum命令出现以下错误提示: 解决方法如下 1、使用su或sudo -s命令使普通用户切换为root用户 2、然后检测是否安装了build-essential程序包,输入命令: apt-get install build-essential 3、进度走完后安装yum,输入命令: apt-get install yum 如果成功安装ÿ…...
【Vue.js 和 React.js 的主要区别是什么?】
Vue.js 和 React.js 的主要区别是什么? 前言 Vue.js 和 React.js 是当前最流行的两个前端框架,它们都用于构建用户界面,但在设计理念、语法和使用方式上有显著差异。本文将从多个维度对比 Vue.js 和 React.js 的主要区别,帮助开…...
HarmonyOS NEXT 全栈开发实战手册(API 12+)
一、HarmonyOS NEXT 架构升级与关键技术 1.1 分布式能力增强(重点标注) 跨设备计算网格:支持动态分配 GPU/CPU/NPU 资源 // 分布式渲染示例(API 12) import renderService from ohos.distributedHardware.render; l…...
【rt-thread】rt-thread 控制 led 的两种方式
1. pin设备 #define LED_PIN 3int led(void) {rt_uint8_t count;rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); for(count 0 ; count < 10 ;count){ rt_pin_write(LED_PIN, PIN_HIGH);rt_kprintf("led on, count : %d %d\r\n", count, rt_pin_read(LED_PIN));…...
Python爬虫系列教程之第十三篇:构建高可用爬虫系统 —— 混合架构与自动化监控
大家好,欢迎继续关注本系列爬虫教程!随着爬虫项目规模的不断扩大和业务需求的提升,单一技术方案往往难以满足实际应用中对高可用性、稳定性和自动化监控的要求。如何构建一个既能应对多种反爬策略,又能在异常情况下自动恢复、实时…...
picomax 中 rkipc 的main.c文件分析
main函数 int main(int argc, char **argv) {//wait_key_event 这个进程的pidpthread_t key_chk;LOG_DEBUG("main begin\n");//luckfox-pico/project/app/rkipc/rkipc/common/common.c中//显示版本rkipc_version_dump();//设置信号signal(SIGINT, sig_proc);signal(…...
深入理解 JVM 的栈帧结构
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally
068_异常处理之后做些什么_finally 异常处理之后做些什么_try语句的完全体_最终_finally 回忆上次内容 我们了解了 try 的细节 except 可以 捕获到异常 但报错比较简单 添加图片注释,不超过 140 字(可选) 游乐场里面的 报错 更全 更丰富 …...
数据库端性能测试优化案例
数据库端性能测试优化案例 数据库是系统性能的关键瓶颈之一,特别是在高并发、大数据量的场景下。以下是一些典型的数据库端性能测试优化案例,涵盖了查询优化、索引策略、连接池管理、分布式数据库设计等多个方面: 1. 案例:优化慢…...
如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...
要使用 DeepSeek 的 CV 模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建,一般可以按照以下步骤实现: 1. 准备工作 1.1 获取 API 访问权限 首先,你需要从 DeepSeek 官方获取 API 访问权限和相应的 API 密钥。这通常需要在 De…...
PySide6学习专栏(四):用多线程完成复杂计算任务
如果计程序中要处理一个非常庞大的数据集中的数据,且数据处理计算很复杂,造成数据处理占用大量时间和CPU资源,如果不用多线程,仅在主进程中来处理数据,将会使整个程序卡死,必须采用多线程来处理这些数据是唯…...
神经网络八股(1)
1.什么是有监督学习,无监督学习 有监督学习是带有标签的,无监督学习是没有标签的,简单来说就是有监督学习的输入输出都是固定的,已知的,无监督学习输入是已知的,输出是不固定的,无监督学习是通…...
深度学习每周学习总结Y1(Yolov5 调用官方权重进行检测 )
🍨 本文为🔗365天深度学习训练营 中的学习记录博客Y1中的内容 🍖 原作者:K同学啊 | 接辅导、项目定制 ** 注意该训练营出现故意不退押金,恶意揣测偷懒用假的结果冒充真实打卡记录,在提出能够拿到视频录像…...
计算机视觉基础|从 OpenCV 到频域分析
一、引言 在当今数字化时代,图像处理已渗透到我们生活的方方面面,从日常使用的智能手机拍照美化,到医学领域的精准诊断,再到自动驾驶中的环境感知,其重要性不言而喻。在图像处理领域中,OpenCV 和频域分析&…...
74. 搜索二维矩阵(LeetCode 热题 100)
题目来源; 74. 搜索二维矩阵 - 力扣(LeetCode) 题目内容: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &am…...
netcore libreoffice word转pdf中文乱码
一、效果 解决: cd /usr/share/fonts/ mkdir zhFont cd zhFont #windows系统C:\Windows\Fonts 中复制/usr/share/fonts/zhFont sudo apt update sudo apt install xfonts-utils mkfontscale mkfontdir #刷新字体缓存 fc-cache -fv #查看已安装的字体列表 fc-list :…...
qt-C++笔记之创建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并关联视图和场景的方法
qt-C笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 code review! 参考笔记 1.qt-C笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 2.qt-C笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过…...
OpenGL 01--构建GLFW、创建第一个工程、配置GLAD
一、OpenGL介绍 一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。 OpenGL规…...
