Qt扫盲-QAbstractButton 笔记总结

news2024/11/16 0:03:27

QAbstractButton使用总结

  • 一、概要
    • 1.显示内容
    • 2. 快捷键
    • 3. 对话框默认按钮
    • 4. 按钮状态
    • 5. 信号说明
    • 6. 自定义按钮

QAbstractButton 类实现的是一个抽象按钮。主要是Button类具有的共性,但是处理用户的操作响应、并绘制不同按钮的形式是由子类来完成的。

一、概要

QAbstractButton 同时支持 Push 按钮和 checkable(toggle)按钮。

  • Checkable(toggle)按钮在QRadioButton 和 QCheckBox类中实现。
  • Push 按钮在 QPushButton 和 QToolButton 类中实现;如果需要。

1.显示内容

任何继承了 QAbstractButton 的按钮类 都可以显示包含文本和图标的标签。如果按钮被禁用,则其标签将更改,以使按钮具有“禁用”外观。

  • setText() 设置文本;
  • setIcon() 设置图标;

也就是说 Qt 框架提供的 QPushButton, QToolButton, QCheckBox 和 QRadioButton 都可以展示 icon 图标 和 text文字

2. 快捷键

如果按钮是带有包含与号 (‘&’) 的字符串的文本按钮,则 QAbstractButton 会自动创建一个快捷键。要显示实际的 & 符号,请使用“&&”。例如:

QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this);
  • 运行结果:
    在这里插入图片描述

Alt+C 快捷键分配给按钮,即当用户按 Alt+C 时,按钮将调用 animateClick()。
还可以使用 setShortcut() 函数设置自定义快捷键。这主要适用于没有任何文本的按钮,因此不能有任何自动快捷方式。

button->setIcon(QIcon(":/images/print.png"));
button->setShortcut(tr("Alt+F7"));

3. 对话框默认按钮

在一个对话框窗口上,可以设置按钮为默认按钮,使用的就是下面两个函数
QPushButton::setDefault()QPushButton::setAutoDefault()

默认其实就是像这种 Save 被选中 ,默认是有焦点的
在这里插入图片描述

  • QPushButton::setAutoDefault()
    此属性保存按钮是否为自动默认按钮
    如果此属性设置为 true,则按钮是自动默认按钮。
    在某些 GUI 样式中,默认按钮周围会绘制一个额外的框架,最多 3 个像素或更多。Qt会自动在自动默认按钮周围保持此空间,即自动默认按钮可能具有稍大的提示。这个可以用 QSS美化设置
    QPushButton:default{ /* 样式代码 */ }
    此属性的默认值对于具有 QDialog 父级的按钮为 true;否则默认为 false。
  • QPushButton::setDefault()
    此属性保存按钮是否为默认按钮
    默认按钮和自动默认按钮决定当用户在对话框中按 Enter 时会发生什么情况。
    当用户按 Enter 时,将自动按下此属性设置为 true 的按钮(即对话框的默认按钮),但有一个例外:如果 autoDefault 按钮当前具有焦点,则按下 autoDefault 按钮。当对话框具有自动默认按钮但没有默认按钮时,按 Enter 将按当前具有焦点的自动默认按钮,如果没有按钮具有焦点,则按焦点链中的下一个自动默认按钮。
    在对话框中,一次只能有一个按钮是默认按钮
    默认按钮行为仅在对话框中提供。当按钮具有焦点时,始终可以通过按空格键从键盘单击按钮。如果在对话框可见时当前默认按钮的默认属性设置为 false,则下次对话框中的按钮获得焦点时,将自动分配新的默认值。
    此属性的默认值为 false。

4. 按钮状态

QAbstractButton 提供了用于按钮的大多数状态:常用的如下

状态名含义
isDown()表明按钮是否是 press 状态
isChecked()表明按钮是否是 checked 状态,只有 checkabel 按钮具有 checked 或 unchecked 状态
isEnabled()表明按钮是否是 可以被 press 按下状态, 派生自 QAbstractButton 的按钮在接受鼠标和上下文菜单事件 是disabled
setCheckable()表明按钮是否是 可以 toggle
setAutoRepeat()设置按钮被快速按下时,是否重复接收按钮信号,其实就是说我可以设置在一定时间间隔内的点击鼠标是无效的,避免高频点击按钮出问题

5. 信号说明

QAbstractButton 提供了4种信号

信号名含义
pressed()在鼠标左键在按钮内部按下时触发
released()在鼠标左键在按钮内部释放时触发
clicked()在鼠标第一次按钮后并释放的时候,或者键盘快捷键按下时,或者 软件上这个 emit click 或者 emit animateClick()
toggled()当这个 toggle button 状态改变时,其实就是 checked 或 unchecked 的时候都会触发

6. 自定义按钮

要对 QAbstractButton 进行继承,您必须至少重新实现 paintEvent() 来绘制按钮的轮廓及其文本或像素图。通常建议重新实现 sizeHint(),有时还可以按 hitButton()(以确定按钮按下是否在按钮内)。对于具有两种以上状态的按钮(如三态按钮),您还必须重新实现 checkStateSet()nextCheckState()

后面我实现一下三态按钮。

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

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

相关文章

图文深度解析Linux内存碎片整理实现机制以及源码

图文深度解析Linux内存碎片整理实现机制以及源码。 物理内存是以页为单位进行管理的,每个内存页大小默认是4K(大页除外)。申请物理内存时,一般都是按顺序分配的,但释放内存的行为是随机的。随着系统运行时间变长后,将会出现以下情况: 在多道程序当中,如果要让我们的程…

深度解析车载域控制器

文章目录域控制器域控制器的组成ADAS域控制器智能座舱域HUD仪表盘IVI域控制器的发展域控制器对传统ECU的挑战域控制器 ​ 随着车辆的信息化程度的发展,车辆的ECU也越来越多,从引擎控制、转向助力、仪表、影音等,传统的汽车电子电气架构是分布…

基于Intel® Core™ i5 机器人控制器

XM-6815是一款基于Intel 11代酷睿i系列平台CPU壁挂式电脑,扩展内存槽,1mSATA,3千兆网口,6COM,4USB 3.0,4USB 2.0。该产品适合工业机器人控制器、机器视觉控制器等壁挂安装应用场景. 产品规格 产品类型Inte…

阿里巴巴内部不传之秘「十亿级并发系统顶级教程」GitHub一夜封神

何为超大流量? 超大流量是一个很容易理解的意思!举个例子:现在国内疫情反弹,每个小区都要做核酸那么如果同一时间下来一大批人一起做核酸,那么这就是大流量,然后志愿者将人员进行分配排队让医务人员处理的过来那么这就…

Qt5.6.1移植海思Hi3521d(二)

系列文章目录 Qt5.6.1移植海思Hi3521d(一) 前言 该篇讲解一下,使用海思交叉编译器arm-hisiv500-linux-gcc,编译qt5.6源码,搭建qt交叉编译环境 一、修改qmake.conf 打开文件~/Project/qt-everywhere-opensource-src-5…

Python制作简易版烟花,没资金买烟花就来做个电子版的吧

前言 听说有人说我很久没更新了,那今天来表演个粒子烟花 跨年倒计时20天?我已经开始整烟花了,虽然不是很好看吧,但是也能将就看看 😥 这个的背景图,音乐,还有文字都是可以自己修改的哦 效果…

[附源码]JAVA毕业设计-心理健康管理-(系统+LW)

[附源码]JAVA毕业设计-心理健康管理-(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&a…

String 创建了几个对象?

问题一 String zy1 “小朱”; String zy2 “小朱”; 复制代码 问题二 String zy1 “小朱”; String zy2 “大朱”; 复制代码 问题三 String zy1 new String(“小朱”); String zy2 new String(“小朱”); 复制代码 问题四 String zy1 new String(“小朱”);…

09 - 主引导程序控制权的转移

---- 整理自狄泰软件唐佐林老师课程 文章目录1. BootLoader内存布局2. 通过FAT表加载文件内容3. 编程实验:Loader文件内容的加载4. 第一个Loader程序4.1 汇编小贴士:标志寄存器4.2 编程实验:控制权转移5. 小结1. BootLoader内存布局 2. 通过F…

你还不知道「并发下的三色标记」么?

引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时 计数器值就加一;当引用失效时,计数器值就减一; 任何时刻计数器为零的对象就是不可能再被使用的。 引用计数算法的缺陷 如下面代码,两个对象互相引用导致无法回收♻️ 对…

【OpenCV学习】第12课:特征提取(高斯不同)

仅自学做笔记用,后续有错误会更改 理论 定义:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同(DOG)高斯不同是图像的内在特征, 在灰度图像增强丶角点检测中经常用到…

【MySQL】深入分析 锁机制(一)行锁 加锁规则 之 等值查询

文章目录前言一、共享锁(S)和排它锁(X)二、行锁的3种算法Record LockGap LockNext-key Lock三、加锁规则 之 等值查询分析数据准备3.1 聚集索引有匹配索引无匹配索引3.2 唯一索引有匹配索引无匹配索引3.3 普通索引有匹配索引无匹配…

游戏蓝牙耳机哪个好用?2022超低延迟游戏蓝牙耳机推荐

随着蓝牙耳机的快速发展,使用蓝牙耳机玩游戏的人也越来越多。那么,游戏蓝牙耳机哪个好用呢?当然是延迟越低的蓝牙耳机玩游戏的体验感会越好,我们都知道蓝牙耳机相对于有线耳机来说,或多或少会存在延迟。下面&#xff0…

一文讲解linux SMP Boot

说明: Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio 1. 介绍 SMP, Symmetric Multi-Processor,相对于单核处理器来说,SMP实现了真正严格意义上…

写出这个数

目录 1002:写出这个数 输入格式: 输出格式: 输入样例: 输出样例: 代码长度限制 时间限制 内存限制 思路: 1.求和 1.2代码: 2.找到sum的每一位 2.2代码: 3.汉语拼音输出数字 3.2代码: 完整代码: 时间复杂度: 总结: 题…

通过MQ进行系统对接

消息要有来源系统,消息类型,收到消息的应用,通过url取数据。做一个开关,用户可以自己选择方案一和方案二。 方案一:A公司的消息中存json,供应链直接获取json 方案二:通过A公司消息中的UrL&…

Windows系统iis 和多界面怎么安装

Windows系统iis 和多界面怎么安装 服务器拿到手都是有iis(iis:用于搭建网站)和多界面(多界面:用于同时多人操作服务器) 但也有服务器是没有安装iis和多界面的,遇到这样的情况就手足无措了。 今…

实训任务5:ZooKeeper节点操作

文章目录一、实训目的二、实训要求三、实训任务四、完成任务(一)准备工作(二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建股票价格类(1)创建init()方法(2)创…

【python脚本】ICer的脚本入门训练——find_key

我们的目标是┏ (゜ω゜)☞芯片前端全栈工程师~喵! 前言 往期回顾: 【python脚本】ICer的脚本入门训练——svn_back_尼德兰的喵的博客-CSDN博客_svn back文件 【python脚本】ICer的脚本入门训练——gen_tc_尼德兰的喵的博客-CSDN博客 查找关键词这一类脚…

TFT-LCD LVGL与硬件交互

TFT-LCD LVGL与硬件交互 屏幕能正常显示LVGL官方例程,说明LVGL移植成功了,本次实验使用屏幕通过LVGL控制开发板硬件 实现效果 用LVGL画两个按钮和一个标签,一个按钮控制蜂鸣器,另一个按钮控制继电器,标签显示“TFT-…