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.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")
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下基本指令(4)

Linux权限的概念 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”,普通用户…

网络安全设备防护原理 网络安全防护装置

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 防火墙 简介 网络层的防护设备,依照特殊的规则允许或者限制传输的数据通过 是由软件和硬件设备组合而成,在内部网和外部网之间、专用网…

windwos与linux环境下Iperf3带宽测试工具的安装、使用

目录 一、前言 二、windows 2.1下载 2.2安装 2.3使用 2.3.1服务端 2.3.2客户端 2.3.3输出内容 1.客户端 2.服务端 2.4.相关命令 三、linux 3.1安装 3.2使用 1.服务端 2.客户端 3.输出内容 1.客户端 2.服务端 一、前言 在数字化浪潮下,网络性能…

达梦统计信息

统计信息 统计信息概述 统计信息是数据库中关于表和索引数据的元信息,用于描述数据的分布、唯一性、大小等特征。数据库优化器依赖统计信息来选择最优的执行计划。统计信息对于 CBO(基于代价的优化器)生成执行计划具有直接影响。 收集统计…

【面试系列】Java开发--AI常见面试题

1、实际工作或学习中用过哪些Ai工具 1.1、AI编程1.2、AI对话聊天1.3、AI图像工具1.4、AI办公工具 2、谈谈你知道的AI领域的一些常见词汇及其含义的理解? 例如AIGC、LLM、DeepLearning分别是什么意思? 2.1、AIGC(Artificial Intelligence Gene…

一文讲解Redis为什么读写性能高以及I/O复用相关知识点

Redis为什么读写性能高呢? Redis 的速度⾮常快,单机的 Redis 就可以⽀撑每秒十几万的并发,性能是 MySQL 的⼏⼗倍。原因主要有⼏点: ①、基于内存的数据存储,Redis 将数据存储在内存当中,使得数据的读写操…

OnlyOffice:前端编辑器与后端API实现高效办公

OnlyOffice:前端编辑器与后端API实现高效办公 一、OnlyOffice概述二、前端编辑器:高效、灵活且易用1. 完善的编辑功能2. 实时协作支持3. 自动保存与版本管理4. 高度自定义的界面 三、后端API:管理文档、用户与权限1. 轻松集成与定制2. 实时协…

【opencv】图像基本操作

一.计算机眼中的图像 1.1 图像读取 cv2.IMREAD_COLOR:彩色图像 cv2.IMREAD_GRAYSCCALE:灰色图像 ①导包 import cv2 # opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline ②读取图像 img cv2.imread(…

fastadmin实现海报批量生成、邮件批量发送

记录一个海报批量生成、邮件批量发送功能开发,业务场景如下: 国外客户做观展预登记,工作人员通过后台,批量给这些观众生成入场证件并发送到观众登记的邮箱,以方便观众入场时快速进场。证件信息包含入场二维码、姓名&a…

3.Docker常用命令

1.Docker启动类命令 1.启动Docker systemctl start docker 2.停止Docker systemctl stop docker 3.重启Docker systemctl restart docker 4.查看Docker状态 systemctl status docker 5.设置开机自启(执行此命令后每次Linux重启后将自启动Docker) systemctl enable do…

1.21作业

1 unserialize3 当序列化字符串中属性个数大于实际属性个数时,不会执行反序列化 外部如果是unserialize()会调用wakeup()方法,输出“bad request”——构造url绕过wakeup 类型:public class&…

【Spring详解四】自定义标签的解析

四、自定义标签的解析 自定义标签的解析是通过 BeanDefinitionParserDelegate .parseCustomElement(ele)进行的,解析来我们进行详细分析。 DefaultBeanDefinitionDocumentReader.class 4.1 自定义标签的使用 扩展 Spring 自定义标签配置一般需要以下几个步骤&#x…

基于springboot校园健康系统的设计与实现(源码+文档)

大家好我是风歌,今天要和大家聊的是一款基于springboot的园健康系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于springboot校园健康系统的设计与实现的主要使用者管理员具有最高的权限,通…

如何修改Windows系统Ollama模型存储位置

默认情况下,Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中,这会占用大量 C 盘空间,增加C盘“爆红”的几率。所以,我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…

基于Python+Vue开发的反诈视频宣传管理系统源代码

项目简介 该项目是基于PythonVue开发的反诈视频宣传管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的反…

VMware安装Centos 9虚拟机+设置共享文件夹+远程登录

一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …

华为云deepseek大模型平台:deepseek满血版

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册: 华为云deepseek大模型平台注册:https://cloud.siliconflow.cn/i/aDmz6aVN 说明:填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens;2个帐号间不会与其他关联…

import requests Pycharm 报错

#PyCharm安装requests失败解决方法 PyCharm安装request失败解决方法(亲测有效) import requests Pycharm 报错 尝试从系统终端运行此命令。确保使用为 D:\Python\venv\Scripts\python.exe 处的 Python 解释器安装的正确版本的 pip。失败一&#xff1…

基于云的物联网系统用于实时有害藻华监测:通过MQTT和REST API无缝集成ThingsBoard

论文标题 **英文标题:**Cloud-Based IoT System for Real-Time Harmful Algal Bloom Monitoring: Seamless ThingsBoard Integration via MQTT and REST API **中文标题:**基于云的物联网系统用于实时有害藻华监测:通过MQTT和REST API无缝集…

VMware converter standalone迁移windows老版本系统到esxi

最近因为有个客户有5台老服务器想淘汰掉换成新服务器,有多老呢?差不多20年了。比我干这个行业的时间还久。 老服务器的系统分别是: 1:3台windows server 2008 sp2 x64系统 2:2台windows server 2003 sp2 x32系统 新服务…