QAbstractButton Class

QAbstractButton 是按钮widget的抽象基类, 提供按钮的常见功能. 更多...

头文件: #include <QAbstractButton>
qmake: QT += widgets
基类: QWidget
派生类:

QCheckBox, QPushButton, QRadioButton, and QToolButton

属性

公有函数

QAbstractButton(QWidget *parent = Q_NULLPTR)
~QAbstractButton()
bool autoExclusive() const
bool autoRepeat() const
int autoRepeatDelay() const
int autoRepeatInterval() const
QButtonGroup *group() const
QIcon icon() const
QSize iconSize() const
bool isCheckable() const
bool isChecked() const
bool isDown() const
void setAutoExclusive(bool)
void setAutoRepeat(bool)
void setAutoRepeatDelay(int)
void setAutoRepeatInterval(int)
void setCheckable(bool)
void setDown(bool)
void setIcon(const QIcon &icon)
void setShortcut(const QKeySequence &key)
void setText(const QString &text)
QKeySequence shortcut() const
QString text() const

公有槽函数

void animateClick(int msec = 100)
void click()
void setChecked(bool)
void setIconSize(const QSize &size)
void toggle()
  • 19 个公有槽函数继承自 QWidget
  • 1 个公有槽函数继承自 QObject

信号

void clicked(bool checked = false)
void pressed()
void released()
void toggled(bool checked)

受保护的函数

virtual void checkStateSet()
virtual bool hitButton(const QPoint &pos) const
virtual void nextCheckState()

重新实现的受保护函数

virtual void changeEvent(QEvent *e)
virtual bool event(QEvent *e)
virtual void focusInEvent(QFocusEvent *e)
virtual void focusOutEvent(QFocusEvent *e)
virtual void keyPressEvent(QKeyEvent *e)
virtual void keyReleaseEvent(QKeyEvent *e)
virtual void mouseMoveEvent(QMouseEvent *e)
virtual void mousePressEvent(QMouseEvent *e)
virtual void mouseReleaseEvent(QMouseEvent *e)
virtual void paintEvent(QPaintEvent *e) = 0
virtual void timerEvent(QTimerEvent *e)
  • 35 个受保护的函数继承自 QWidget
  • 9 个受保护的函数继承自 QObject
  • 1 个受保护的函数继承自 QPaintDevice

其他继承的成员

  • 1 个公有变量继承自 QObject
  • 5 个静态公有成员继承自 QWidget
  • 10 个静态公有成员继承自 QObject
  • 1 个受保护的槽函数继承自 QWidget
  • 2 个受保护的变量继承自 QObject
  • 1 protected type inherited from QPaintDevice

详细描述

QAbstractButton 是按钮widget的抽象基类, 提供按钮的常见功能.

这个类实现一个 抽象 按钮. 子类处理用户操作, 并定义如何绘制按钮.

QAbstractButton 支持普通按钮和选中按钮. 选中按钮是QRadioButtonQCheckBox . 普通按钮是 QPushButtonQToolButton ; 如果需要, 它们可以相互转换.

任何按钮都能显示文本和图标. setText() 设置文本; setIcon() 设置图标. 如果按钮被禁用, 它的标签变成 "disabled" 外观.

如果按钮的文本包含前缀'&', QAbstractButton 自动创建快捷键. 例如:


  QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this);

上述示例中, Alt+C 作为按钮的快捷键. 也就是说., 当用户按下 Alt+C, 按钮将调用 animateClick(). 参见 QShortcut . 你可以使用 '&&', 显示'&'.

你也可以调用 setShortcut() 函数设置快捷键. 这个函数对于不显示文本的按钮非常有用.


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

Qt提供的所有按钮 (QPushButton, QToolButton, QCheckBoxQRadioButton) 都能显示 texticons.

在对话框中, 你可以调用 QPushButton::setDefault() 和 QPushButton::setAutoDefault()将按钮设置为默认按钮.

QAbstractButton 提供按钮的大部分状态:

  • isDown() 表示按钮是否被 按下 .
  • isChecked() 表示按钮是否被 选中. 仅有可选按钮才支持这种状态.
  • isEnabled() 表示按钮是否可以被用户按下.

    注意: 不同于其他widget, QAbstractButton 的派生类在禁用时接收鼠标和上下文菜单事件.

  • setAutoRepeat() 设置按钮在用户按下时, 是否自动重复发送按下事件. autoRepeatDelayautoRepeatInterval 定义如何自动重复.
  • setCheckable() 设置按钮是否可以被选中.

isDown() 和 isChecked() 的区别: 当用户单击一个可被选中的按钮时, 按钮先产生 按下 事件, 用户释放按钮后, 按钮切入 选中 状态. 当用户再次单机按钮时, 按钮先产生 按下 事件, 用户释放按钮后, 按钮切入 未选中 状态 (isChecked() 和 isDown() 都返回 false).

QAbstractButton 提供四种信号:

  1. pressed() : 光标在按钮中, 并按下鼠标左键.
  2. released() : 释放鼠标左键.
  3. clicked() : 按钮首次按下并释放; 按下快捷键; 调用 click() 函数; 调用 animateClick() 函数.
  4. toggled() : 切换按钮的状态发生改变.

定义 QAbstractButton 的子类时, 你必须重新实现 paintEvent() , 绘制按钮的边框和它的显示文本或图标. Qt提倡重新实现 sizeHint(), 有时也需要实现 hitButton() (检测按下是否在按钮内). 对于具有两种以上状态的按钮, 你还必须重新实现 checkStateSet() 和 nextCheckState().

参见 QButtonGroup.

属性

autoExclusive : bool

按钮是否启动自动独占性

如果启用 autoExclusivi, 父对象相同的选中按钮就像分组一样. 在一个独占按钮分组中, 任何时候只能选中一个按钮; 选中其他按钮自动取消前一个选中按钮.

The property has no effect on buttons that belong to a button group.

除了单选按钮, autoExclusive 默认关闭.

访问函数:

bool autoExclusive() const
void setAutoExclusive(bool)

参见 QRadioButton.

autoRepeat : bool

按钮是否启动自动重复

如果启动 autoRepeat , 那么在按下按钮时, Qt会定期发送信号(pressed(), released(), 和 clicked()) . autoRepeat 默认关闭. 初始延迟时间(ms)和重复间隔时间(ms)由 autoRepeatDelayautoRepeatInterval定义.

注意: 如果一个按钮被快捷键触发按下动作, 那么自动重复的启用和时间由系统定义, 跟该类无关. 信号( pressed(), released(), and clicked() ) 正常发送.

访问函数:

bool autoRepeat() const
void setAutoRepeat(bool)

autoRepeatDelay : int

自动重复的初始延迟时间

如果启用 autoRepeat , autoRepeatDelay 在自动重复以前定义初始延迟时间(ms).

这个属性从 Qt 4.2 开始介绍.

访问函数:

int autoRepeatDelay() const
void setAutoRepeatDelay(int)

参见 autoRepeat and autoRepeatInterval.

autoRepeatInterval : int

自动重复的间隔时间

如果启用 autoRepeat , autoRepeatInterval 定义自动重复的间隔时间(ms).

这个属性从 Qt 4.2 开始介绍.

访问函数:

int autoRepeatInterval() const
void setAutoRepeatInterval(int)

参见 autoRepeatautoRepeatDelay.

checkable : bool

按钮是否可被选中

默认情况下, 按钮不可被选中.

访问函数:

bool isCheckable() const
void setCheckable(bool)

参见 checked.

checked : bool

按钮是否被选中

仅有可选按钮才支持这种状态. 默认情况下, 按钮是未被选中.

访问函数:

bool isChecked() const
void setChecked(bool)

通知信号:

void toggled(bool checked)

参见 checkable.

down : bool

按钮是否被按下

如果这个属性是 true, 那么按钮被按下. 如果你将这个属性设置为true, 那么不会发送信号( pressed() 和 clicked()). 默认值是 false.

访问函数:

bool isDown() const
void setDown(bool)

icon : QIcon

按钮显示的图标

图标的默认大小由 GUI 样式定义, 但是也可通过属性 iconSize 调整图标大小.

访问函数:

QIcon icon() const
void setIcon(const QIcon &icon)

iconSize : QSize

按钮的图标大小.

图标的默认大小由 GUI 样式定义. 这个属性定义按钮图标的最大尺寸. 较小的图标不会放大.

访问函数:

QSize iconSize() const
void setIconSize(const QSize &size)

shortcut : QKeySequence

快捷键

访问函数:

QKeySequence shortcut() const
void setShortcut(const QKeySequence &key)

text : QString

按钮的显示文本

如果按钮没有文本, text() 函数返回空字符串.

如果文本包含前缀 ('&'), 则一个快捷键被自动创建. 紧跟 '&'的字符是快捷. 如果文本没有定义快捷键, 那么之前的任何快捷键都被清除. 详见 QShortcut . 使用 '&&' 显示 '&'.

默认是空.

访问函数:

QString text() const
void setText(const QString &text)

成员函数

QAbstractButton::QAbstractButton(QWidget *parent = Q_NULLPTR)

构造函数.

参数 parent 父对象.

QAbstractButton::~QAbstractButton()

析构函数.

[slot] void QAbstractButton::animateClick(int msec = 100)

点击事件的执行过程: 按钮被立即按下, msec 后释放 (默认是 100 ms).

按钮释放之前调用这个函数重置释放时间.

所有与点击相关的信号被适时发送.

如果禁用按钮 , 该函数不执行任何操作.

参见 click().

[virtual protected] void QAbstractButton::changeEvent(QEvent *e)

重新实现 QWidget::changeEvent().

[virtual protected] void QAbstractButton::checkStateSet()

如果不是从nextCheckState()内部调用 setChecked() 函数, Qt会调用该函数. 它允许派生类重置它们的中间按钮状态.

参见 nextCheckState().

[slot] void QAbstractButton::click()

执行点击动作.

所有与点击相关的信号被适时发送. 如果按钮是可选中的, 更改选中状态.

如果禁用按钮 , 该函数不执行任何操作.

参见 animateClick().

[signal] void QAbstractButton::clicked(bool checked = false)

信号触发情况: 光标在按钮内,按下再释放按钮; 按下快捷键; 调用click(); 调用 animateClick(). 通常情况下, 你调用 setDown(), setChecked() 或 toggle(), 不会发送这个信号.

按钮是可选中的, 按钮被选中时, checked 是 true, 否则是 false .

参见 pressed(), released() 和 toggled().

[virtual protected] bool QAbstractButton::event(QEvent *e)

重新实现 QObject::event().

[virtual protected] void QAbstractButton::focusInEvent(QFocusEvent *e)

重新实现 QWidget::focusInEvent().

[virtual protected] void QAbstractButton::focusOutEvent(QFocusEvent *e)

重新实现 QWidget::focusOutEvent().

QButtonGroup *QAbstractButton::group() const

返回按钮归属的组.

如果按钮不属于任何 QButtonGroup, 这个函数返回 0.

参见 QButtonGroup.

[virtual protected] bool QAbstractButton::hitButton(const QPoint &pos) const

true 表示 pos 在按钮的可点击矩形区内; 否则返回 false.

默认情况下, 可点击区域是整个按钮. 子类中重新实现这个函数实现自定义点击区域的形状和大小.

[virtual protected] void QAbstractButton::keyPressEvent(QKeyEvent *e)

重新实现 QWidget::keyPressEvent().

[virtual protected] void QAbstractButton::keyReleaseEvent(QKeyEvent *e)

重新实现 QWidget::keyReleaseEvent().

[virtual protected] void QAbstractButton::mouseMoveEvent(QMouseEvent *e)

重新实现 QWidget::mouseMoveEvent().

[virtual protected] void QAbstractButton::mousePressEvent(QMouseEvent *e)

重新实现 QWidget::mousePressEvent().

[virtual protected] void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)

重新实现 QWidget::mouseReleaseEvent().

[virtual protected] void QAbstractButton::nextCheckState()

按钮被点击时, 调用这个函数. 如果按钮是可选中的isCheckable(), 默认实现是调用 setChecked(!isChecked()). 派生类可以重新实现这个函数定义立即按钮状态.

参见 checkStateSet().

[pure virtual protected] void QAbstractButton::paintEvent(QPaintEvent *e)

重新实现 QWidget::paintEvent().

[signal] void QAbstractButton::pressed()

按钮按下时发送这个信号.

参见 released() 和 clicked().

[signal] void QAbstractButton::released()

按钮释放时发送这个信号.

参见 pressed(), clicked() 和 toggled().

[virtual protected] void QAbstractButton::timerEvent(QTimerEvent *e)

重新实现 QObject::timerEvent().

[slot] void QAbstractButton::toggle()

改变按钮的可选中状态.

参见 checked.

[signal] void QAbstractButton::toggled(bool checked)

按钮的可选中状态改变时发送这个信号. 如果按钮被选中, checked 是 true, 否则 false.

这个可能由一个用户动作产生, 调用 click() 或者调用 setChecked() .

信号发送之前, Qt会更新独占性分组中的按钮状态. 这就意味着槽函数可以判断按钮的选中状态.

槽函数可以使用如下示例的模式, 仅处理按钮的选中状态信号, 忽略未选中状态信号:


  void MyWidget::reactToToggle(bool checked)
  {
     if (checked) {
        // Examine the new button states.
        ...
     }
  }

按钮分组使用 QButtonGroup 创建, 改变分组中按钮的状态会发送信号 QButtonGroup::buttonClicked().

注意: 这是checked的通知信号.

参见 checked and clicked().