QML ToolButton与DelayButton的使用、详解与自定义样式

news2025/2/22 6:25:30

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.15

ToolButton {
    text: "Click Me"
    onClicked: console.log("ToolButton Clicked!")
}
设置图标

ToolButton 通常用于显示图标按钮,你可以通过 icon 属性来设置图标。

import QtQuick 2.15
import QtQuick.Controls 2.15

ToolButton {
    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: true
    checked: true
    onCheckedChanged: 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: 4000
    onActivated: {
        console.log("Settings reset!")
    }
}
2. onCanceled
  • 如果用户中途松开按钮或未达到延迟时间,则会触发 onCanceled 信号,表示操作被取消。
DelayButton {
    text: "Cancel Action"
    delay: 3000
    onCanceled: console.log("Action canceled!")
}

可用方法

reset()
  • 作用:重置按钮的延迟计时器,使其需要从头重新计时。
DelayButton {
    text: "Restart Countdown"
    delay: 3000
    onTriggered: {
        console.log("Countdown finished!")
    }
    MouseArea {
        anchors.fill: parent
        onClicked: parent.reset()
    }
}

结合图标使用

你可以通过 icon 属性为 DelayButton 设置一个图标,提供更好的用户交互提示。

DelayButton {
    icon.source: "icons/delete.png"
    text: "Delete"
    delay: 3000
    onTriggered: console.log("Deleted!")
}

提示用户延迟中的状态

你可以使用 progress 属性显示当前延迟的完成百分比,比如用外部的 ProgressBar 结合 DelayButton 显示进度状态。

以下是示例代码:

Column {
    DelayButton {
        id: delayButton
        text: "Submit"
        delay: 5000
        onTriggered: console.log("Action executed!")
        onCanceled: console.log("Action canceled!")
    }

    ProgressBar {
        value: delayButton.progress
        from: 0
        to: 1
    }
}

样式自定义

DelayButton 的外观可以自定义(例如通过 background 属性):

DelayButton {
    text: "Delay Action"
    delay: 3000
    background: Rectangle {
        implicitWidth: 100
        implicitHeight: 40
        color: delayButton.pressed ? "lightsteelblue" : "steelblue"
        radius: 8
    }
}

二、效果查看

在这里插入图片描述

三、源码分享

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Controls.Basic
import QtQuick.Dialogs
import CommunicationThread

ApplicationWindow {
    id:window
    width: 1300
    height: 850
    visible: true
    title: qsTr("Hello World")

    header: ToolBar{
        height: 55
        RowLayout{
            anchors.fill: parent
            ToolButton{
                id:btnExport
                implicitWidth: 60
                implicitHeight: 55
                text:"导出报表"
                icon.source:"qrc:/image/image/wait.svg"
                icon.width:32
                icon.height:32
                action:Action{
                    shortcut: StandardKey.Copy
                    onTriggered: console.log("onTriggered")
                }

                background: Rectangle{
                    color:btnExport.pressed?"lightblue":btnExport.hovered?"dodgerblue":"steelblue"
                    radius: 5
                }
                contentItem: Item {
                    Column{
                        Image {
                            width: parent.parent.parent.icon.width
                            height: parent.parent.parent.icon.height
                            source:parent.parent.parent.icon.source
                            anchors.horizontalCenter: parent.horizontalCenter
                        }
                        Text{
                            text:parent.parent.parent.text
                            anchors.horizontalCenter: parent.horizontalCenter
                            color: btnExport.pressed?"white":"black"
                        }
                    }
                }
                onClicked: {
                    console.log("click")
                }
            }
        }
    }
    DelayButton{
        id:btnDelay
        width: 200
        height: 100
        text: "DelayButton"
        delay:2000
        background: Rectangle{
            color:btnDelay.pressed?"steelblue":btnDelay.hovered?"dodgerblue":"lightblue"
            radius:10
        }
        contentItem: Item{
            Text{
                anchors.fill: parent
                text:parent.parent.text
                color: parent.parent.progress===1?"white":"black"
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
            }
        }
        indicator: Rectangle{
            height: parent.height
            width: parent.width*parent.progress
            color:"#aa000000"
            radius:10
        }
        onClicked: {
            console.log("DelayButton")
        }
        onActivated: {
            console.log("DelayButton onActivated")
        }
    }
}

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

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

相关文章

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…

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是一种广泛应用于三维建模的文件格式&…

网络安全-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…

深入理解 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; 游乐场里面的 报错 更全 更丰富 …

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规…

【时时三省】(C语言基础)求多项式1-1/2+1/3-1/4+...+1/99-1/100的值 用C语言表示

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 示例&#xff1a; 输出结果是 0.688172

kafka-集群缩容

一. 简述&#xff1a; 当业务增加时&#xff0c;服务瓶颈&#xff0c;我们需要进行扩容。当业务量下降时&#xff0c;为成本考虑。自然也会涉及到缩容。假设集群有 15 台机器&#xff0c;预计缩到 10 台机器&#xff0c;那么需要做 5 次缩容操作&#xff0c;每次将一个节点下线…