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

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 是一个提供工具按钮功能的控件,通常用于实现紧凑且功能性强的小型按钮,适用于工具栏或类似的用户界面场景。ToolButtonAbstractButton 的一个子类,因此它继承了很多基本按钮的特性,比如点击事件处理、启用状态、图标等。
  • ToolButtonButton 的主要区别是它更轻量级,样式更简单,同时常常用于呈现一个图标或与工具相关的操作。

常见用法

以下是 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!")
}
onPressedonReleased
  • 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 时,你可以通过设置 Controlbackground, foreground 等属性自定义外观。

ToolButton {text: "Custom Look"background: Rectangle {color: "blue"radius: 8}
}

使用场景

  • 工具栏中的图标按钮。
  • 小型、紧凑的按钮界面。
  • 用于触发快速操作而不占用太多 UI 空间。

2、DelayButton

  • 在 QML 中,DelayButton 是一个特殊的按钮控件,它的主要特点是需要等待一段时间(延迟)才能触发点击事件。这种按钮通常用在需要用户确认的场景,例如敏感操作(删除、重置、提交等),避免误操作。
  • DelayButtonAbstractButton 的派生类,因此继承了标准按钮的功能,比如点击、启用状态、图标等,同时增加了一个延时确认功能。

使用场景

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)加载类时的一种策略。它的核心思想是:当一个类加载器收到加载类的请求时,不会立即自己加载&#xff0…...

【Python爬虫(27)】探索数据可视化的魔法世界

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…...

网络安全-js安全知识点与XSS常用payloads

简介 JavaScript 是一种轻量级的编程语言&#xff0c;定义了HTML的行为。它与Java的关系类似周杰和周杰伦的关系&#xff08;即没有关系&#xff09;。 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间。 脚本可被放置在 HTML 页面的 <body>…...

ip属地是电话号码吗怎么改

在数字化时代&#xff0c;IP属地作为网络身份的一部分&#xff0c;对于许多互联网用户来说并不陌生。然而&#xff0c;关于IP属地的具体含义以及如何更改它&#xff0c;却常常让一些用户感到困惑。特别是当提到IP属地与电话号码之间的关系时&#xff0c;更是容易让人产生误解。…...

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 如果成功安装&#xff…...

【Vue.js 和 React.js 的主要区别是什么?】

Vue.js 和 React.js 的主要区别是什么&#xff1f; 前言 Vue.js 和 React.js 是当前最流行的两个前端框架&#xff0c;它们都用于构建用户界面&#xff0c;但在设计理念、语法和使用方式上有显著差异。本文将从多个维度对比 Vue.js 和 React.js 的主要区别&#xff0c;帮助开…...

HarmonyOS NEXT 全栈开发实战手册(API 12+)

一、HarmonyOS NEXT 架构升级与关键技术 1.1 分布式能力增强&#xff08;重点标注&#xff09; 跨设备计算网格&#xff1a;支持动态分配 GPU/CPU/NPU 资源 // 分布式渲染示例&#xff08;API 12&#xff09; 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爬虫系列教程之第十三篇:构建高可用爬虫系统 —— 混合架构与自动化监控

大家好&#xff0c;欢迎继续关注本系列爬虫教程&#xff01;随着爬虫项目规模的不断扩大和业务需求的提升&#xff0c;单一技术方案往往难以满足实际应用中对高可用性、稳定性和自动化监控的要求。如何构建一个既能应对多种反爬策略&#xff0c;又能在异常情况下自动恢复、实时…...

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 的栈帧结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally

068_异常处理之后做些什么_finally 异常处理之后做些什么_try语句的完全体_最终_finally 回忆上次内容 我们了解了 try 的细节 except 可以 捕获到异常 但报错比较简单 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 游乐场里面的 报错 更全 更丰富 …...

数据库端性能测试优化案例

数据库端性能测试优化案例 数据库是系统性能的关键瓶颈之一&#xff0c;特别是在高并发、大数据量的场景下。以下是一些典型的数据库端性能测试优化案例&#xff0c;涵盖了查询优化、索引策略、连接池管理、分布式数据库设计等多个方面&#xff1a; 1. 案例&#xff1a;优化慢…...

如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...

要使用 DeepSeek 的 CV 模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建&#xff0c;一般可以按照以下步骤实现&#xff1a; 1. 准备工作 1.1 获取 API 访问权限 首先&#xff0c;你需要从 DeepSeek 官方获取 API 访问权限和相应的 API 密钥。这通常需要在 De…...

PySide6学习专栏(四):用多线程完成复杂计算任务

如果计程序中要处理一个非常庞大的数据集中的数据&#xff0c;且数据处理计算很复杂&#xff0c;造成数据处理占用大量时间和CPU资源&#xff0c;如果不用多线程&#xff0c;仅在主进程中来处理数据&#xff0c;将会使整个程序卡死&#xff0c;必须采用多线程来处理这些数据是唯…...

神经网络八股(1)

1.什么是有监督学习&#xff0c;无监督学习 有监督学习是带有标签的&#xff0c;无监督学习是没有标签的&#xff0c;简单来说就是有监督学习的输入输出都是固定的&#xff0c;已知的&#xff0c;无监督学习输入是已知的&#xff0c;输出是不固定的&#xff0c;无监督学习是通…...

深度学习每周学习总结Y1(Yolov5 调用官方权重进行检测 )

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客Y1中的内容 &#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 ** 注意该训练营出现故意不退押金&#xff0c;恶意揣测偷懒用假的结果冒充真实打卡记录&#xff0c;在提出能够拿到视频录像…...

计算机视觉基础|从 OpenCV 到频域分析

一、引言 在当今数字化时代&#xff0c;图像处理已渗透到我们生活的方方面面&#xff0c;从日常使用的智能手机拍照美化&#xff0c;到医学领域的精准诊断&#xff0c;再到自动驾驶中的环境感知&#xff0c;其重要性不言而喻。在图像处理领域中&#xff0c;OpenCV 和频域分析&…...

74. 搜索二维矩阵(LeetCode 热题 100)

题目来源; 74. 搜索二维矩阵 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &am…...

netcore libreoffice word转pdf中文乱码

一、效果 解决&#xff1a; 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, 应用程序编程接口)&#xff0c;包含了一系列可以操作图形、图像的函数。然而&#xff0c;OpenGL本身并不是一个API&#xff0c;它仅仅是一个由Khronos组织制定并维护的规范(Specification)。 OpenGL规…...