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

Qt Widgets 之 QAbstractButton

一、概述

QAbstractButton类是Qt框架中所有按钮控件的 抽象基类,提供了按钮的通用功能基本行为
该类作为抽象接口,定义了按钮的标准行为模式,具体的视觉表现和特定行为则由其子类实现。QAbstractButton继承自QWidget,被QPushButton(标准按钮)、QCheckBox(复选框)、QRadioButton(单选按钮)和QToolButton(工具按钮)等具体按钮类继承。

QObject
QWidget
QAbstractButton
QPushButton
QToolButton
QRadioButton
QCheckBox

QAbstractButton类支持两种基本按钮类型:

  • 普通按钮(点击触发操作)
  • 切换按钮(可选择/取消选择的状态切换)。

通过QAbstractButton提供的通用接口,开发者可以统一地处理各种按钮的状态管理、用户交互和视觉表现,从而构建一致的用户交互体验。

二、QAbstractButton属性

QAbstractButton类提供了一系列属性来控制按钮的外观和行为。下表列出了该类的主要属性:

属性名称类型描述访问函数
autoExclusivebool控制是否启用自动排他性。启用后,同属一个父部件的可选中按钮行为类似于互斥按钮组(任何时候只能选中一个)。默认情况下,除单选按钮外,此属性为false。bool autoExclusive() const
void setAutoExclusive(bool)
autoRepeatbool控制是否启用自动重复功能。启用后,用户按住按钮时会定期发出pressed()、released()和clicked()信号。默认false。bool autoRepeat() const
void setAutoRepeat(bool)
autoRepeatDelayint自动重复的初始延迟时间(毫秒)。定义按钮按下到第一次自动重复信号发出前的时间。int autoRepeatDelay() const
void setAutoRepeatDelay(int)
autoRepeatIntervalint自动重复的时间间隔(毫秒)。定义自动重复信号之间的时间间隔。int autoRepeatInterval() const
void setAutoRepeatInterval(int)
checkablebool控制按钮是否可被选中(即可切换状态)。如果为true,按钮可以在选中和未选中状态之间切换。默认false(QRadioButton和QCheckBox除外)。bool isCheckable() const
void setCheckable(bool)
checkedbool表示按钮当前是否被选中。只有可选中(checkable)按钮才能被设置为选中状态。bool isChecked() const
void setChecked(bool)
downbool表示按钮是否被按下。如果为true,按钮显示为按下状态。bool isDown() const
void setDown(bool)
iconQIcon按钮上显示的图标。QIcon icon() const
void setIcon(const QIcon &icon)
iconSizeQSize按钮上显示的图标的大小。QSize iconSize() const
void setIconSize(const QSize &size)
shortcutQKeySequence与按钮关联的快捷键。按下快捷键将触发按钮点击。QKeySequence shortcut() const
void setShortcut(const QKeySequence &key)
textQString按钮上显示的文本。如果文本包含"&“字符,则会自动创建快捷键(如”&OK"对应Alt+O)。QString text() const
void setText(const QString &text)

三、QAbstractButton信号

QAbstractButton提供了四个主要信号,用于响应用户的不同交互操作:

  1. void clicked(bool checked = false)
    当按钮被点击时发出此信号。这是在鼠标按下并释放、快捷键触发或调用click()/animateClick()方法时触发的最常用信号。对于可选中按钮,参数checked表示按钮的新状态(选中为true,未选中为false)。

  2. void pressed()
    当鼠标按下按钮时立即发出此信号。即使用户还没有释放鼠标按钮,也会立即触发。

  3. void released()
    当鼠标释放按钮时发出此信号。即使鼠标不在按钮上方(即按下后移动到按钮外释放),也会触发此信号。

  4. void toggled(bool checked)
    可选中按钮的状态发生变化时发出此信号(从选中到未选中或从未选中到选中)。参数checked表示按钮的新状态。注意:此信号仅在状态改变时发出,而clicked()信号总是在点击时发出(即使状态没有变化)。

四、QAbstractButton常用方法

QAbstractButton提供了多个公共方法用于控制按钮的行为和状态:

  • QAbstractButton(QWidget *parent = nullptr)
    构造函数,创建一个抽象的按钮对象,可指定父组件。

  • void animateClick(int msec = 100)
    执行一个动画点击:按钮立即被按下,并在指定的毫秒数后释放。会发出所有相关的点击信号。

  • void click()
    模拟按钮点击,触发按钮的点击行为并发出相关信号。

  • void setChecked(bool)
    设置按钮的选中状态(仅对可选中按钮有效)。

  • void toggle()
    切换可选中按钮的状态(从选中到未选中或从未选中到选中)。

  • bool isCheckable() const
    返回按钮是否可选中。

  • bool isChecked() const
    返回按钮是否处于选中状态。

  • bool isDown() const
    返回按钮是否处于按下状态。

  • QButtonGroup *group() const
    返回此按钮所属的按钮组(如果有的话)。

五、QAbstractButton 的作用

1.Qt中的具体子类

首先 Qt 中的常用的几个标准按钮继承于按钮基类QAbstractButton,比如QPushButton
RatioButton等,它们都是基于此实现的具体子类。

2. 自定义按钮控件

除此以外,当需要创建自定义风格的按钮时,可以继承 QAbstractButton并且实现自己的绘制逻辑:

class CustomButton : public QAbstractButton {Q_OBJECT
public:CustomButton(QWidget *parent = nullptr) : QAbstractButton(parent) {}protected:void paintEvent(QPaintEvent *) override {QPainter painter(this);// 自定义绘制代码if(isDown()) {// 绘制按下状态} else {// 绘制正常状态}}QSize sizeHint() const override {return QSize(100, 30);}
};

3. 处理多种按钮类型的通用操作

如果需要统一处理不同类型的按钮时,可以使用 QAbstractButton 作为通用接口,这也是继承的特点。

// 连接所有按钮的点击信号到一个槽函数
void setupButtons(QList<QAbstractButton*> buttons) {for (QAbstractButton *button : buttons) {connect(button, &QAbstractButton::clicked, this, &MyClass::onButtonClicked);}
}

持续记录更新中。。。。。。

http://www.dtcms.com/a/362135.html

相关文章:

  • UCIE Specification详解(十一)
  • 传输层TCP 与 安全层SSL/TLS
  • 【运维篇第四弹】《详解读写分离》什么是读写分离?如何配置一主一从读写分离以及双主双从读写分离?都会在这一篇文章中掌握
  • The Algorithmic Foundations of Differential Privacy - 1
  • 初识JVM
  • Linux之Docker虚拟化技术(三)
  • STM32项目分享:基于单片机的图书馆座位监测系统
  • docker-nacos-v3
  • 告别发票山,拥抱高效流:一位财务经理的“解放”宣言
  • 第四次工业革命简史:从图灵测试到ChatGPT的AI革命
  • ModelScope 开发环境配置指南
  • leetcode笔记
  • OpenCV轻松入门_面向python(第四章色彩空间类型转换)
  • 从全栈开发到微服务架构:一次真实面试的深度解析
  • Ansible 常用模块归纳总结
  • 【Axure高保真原型】表格增删改查(含下拉列表)
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • SQL Server从入门到项目实践(超值版)读书笔记 25
  • 使用 Google OR-Tools 轻松解决复杂优化问题(如排程优化)
  • HarvardX TinyML小笔记2(番外3:数据工程)
  • Node.js版本管理工具 || 全配置安装
  • Claude AI 因编写勒索软件和开展勒索活动而被滥用
  • Agent落地元年:谁在成为最坚实的土壤?
  • 【前端】跨域
  • 懒加载详细讲解
  • 在Linux系统上第一次创建java项目并运行
  • `[特殊字符]LeetCode每日一题 1792. 最大平均通过率(打卡第一天)`
  • 在 React Native 层禁止 iOS 左滑返回(手势返回/手势退出)
  • Unity 串口通讯2 硬件SDK 开发[数据监听,按键监听]
  • 人工智能——课程考核