QAbstractButton Class
QAbstractButton 类是按钮小部件的抽象基类,提供了按钮共有的功能。更多内容...
| 头文件: | #include <QAbstractButton> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QWidget |
| 继承自: |
属性
|
公共函数
| QAbstractButton(QWidget *parent = nullptr) | |
| virtual | ~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() |
| void | click() |
| void | setChecked(bool) |
| void | setIconSize(const QSize &size) |
| void | toggle() |
信号
受保护函数
| virtual void | checkStateSet() |
| virtual bool | hitButton(const QPoint &pos) const |
| virtual void | nextCheckState() |
重新实现的受保护函数
| virtual void | changeEvent(QEvent *e) override |
| virtual bool | event(QEvent *e) override |
| virtual void | focusInEvent(QFocusEvent *e) override |
| virtual void | focusOutEvent(QFocusEvent *e) override |
| virtual void | keyPressEvent(QKeyEvent *e) override |
| virtual void | keyReleaseEvent(QKeyEvent *e) override |
| virtual void | mouseMoveEvent(QMouseEvent *e) override |
| virtual void | mousePressEvent(QMouseEvent *e) override |
| virtual void | mouseReleaseEvent(QMouseEvent *e) override |
| virtual void | paintEvent(QPaintEvent *e) override = 0 |
| virtual void | timerEvent(QTimerEvent *e) override |
详细说明
该类实现了一个抽象按钮。该类的子类负责处理用户操作,并指定按钮的绘制方式。
QAbstractButton 同时支持按压按钮和可选中(切换)按钮。可选中按钮由QRadioButton 和QCheckBox 类实现。按压按钮由QPushButton 和QToolButton 类实现;如果需要,这些类也提供切换行为。
任何按钮均可显示包含文本和图标的标签。setText() 用于设置文本;setIcon() 用于设置图标。如果按钮处于禁用状态,其标签会发生变化,以使按钮呈现“禁用”外观。
如果按钮是文本按钮,且其字符串中包含“&”符号,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 、QCheckBox 和QRadioButton )均可显示text 和icons 。
可以通过QPushButton::setDefault() 和QPushButton::setAutoDefault() 将某个按钮设为对话框中的默认按钮。
QAbstractButton 提供了按钮常用的大部分状态:
- isDown() 表示按钮是否被按下。
- isChecked() 表示按钮是否被选中。只有可选中按钮才能被选中或取消选中(见下文)。
- isEnabled() 表示用户是否可以按下该按钮。
注意: 与其他小部件不同, 从 QAbstractButton 派生的按钮在禁用状态下仍会 接收鼠标和上下文菜单事件。
- setAutoRepeat() 用于设置当用户长按按钮时,按钮是否自动重复。autoRepeatDelay 和autoRepeatInterval 定义了自动重复的实现方式。
- setCheckable() 设置该按钮是否为切换按钮。
isDown() 与isChecked() 之间的区别如下。 当用户点击一个切换按钮以选中它时,按钮会先进入“按下”状态,然后释放并进入“选中”状态。当用户再次点击它(以取消选中)时,按钮会先进入“按下”状态,然后进入“未选中”状态(此时isChecked() 和isDown() 均为 false)。
QAbstractButton 提供了四个信号:
- pressed() 在鼠标光标位于按钮内部时按下鼠标左键时触发。
- released() 信号在鼠标左键松开时发出。
- clicked() 在按钮被按下后松开、输入快捷键,或调用click() 或animateClick() 时触发。
- toggled() 在切换按钮的状态发生变化时发出。
要继承 QAbstractButton,您必须至少重写paintEvent() 方法,以绘制按钮的轮廓及其文本或位图。通常建议也重写sizeHint() 方法,有时还需重写hitButton() 方法(用于判断按键操作是否发生在按钮内部)。 对于具有两个以上状态的按钮(如三态按钮),你还必须重写checkStateSet()和nextCheckState()。
另请参阅 QButtonGroup 。
属性文档
autoExclusive : bool
该属性用于控制是否启用自动互斥功能
如果启用了自动排他性,属于同一父控件的可选中按钮将表现得如同属于同一个排他按钮组一样。在排他按钮组中,任何时候都只能选中一个按钮;选中另一个按钮会自动取消选中先前选中的那个。
该属性对属于按钮组的按钮无效。
默认情况下,autoExclusive 处于关闭状态,单选按钮除外。
访问函数:
| bool | autoExclusive() const |
| void | setAutoExclusive(bool) |
另请参阅 QRadioButton 。
autoRepeat : bool
该属性用于表示是否启用了 autoRepeat
如果启用了自动重复,则当按钮被按下时,pressed()、released() 和clicked() 信号会以固定间隔发出。默认情况下,自动重复处于关闭状态。初始延迟和重复间隔分别由autoRepeatDelay 和autoRepeatInterval 以毫秒为单位定义。
注意:如果按键是通过快捷键按下的,则自动重复功能由系统启用并控制,而非由本类控制。此时,pressed()、released() 和clicked() 信号将与正常情况一样被触发。
访问函数:
| bool | autoRepeat() const |
| void | setAutoRepeat(bool) |
autoRepeatDelay : int
此属性用于设置自动重复的初始延迟
如果启用了autoRepeat ,则autoRepeatDelay定义了自动重复开始前的初始延迟(单位为毫秒)。
相关功能:
| int | autoRepeatDelay() const |
| void | setAutoRepeatDelay(int) |
另请参阅 autoRepeat 和autoRepeatInterval 。
autoRepeatInterval : int
该属性用于设置自动重复的间隔
如果启用了“autoRepeat ”,则“autoRepeatInterval”定义自动重复间隔的长度(单位为毫秒)。
访问函数:
| int | autoRepeatInterval() const |
| void | setAutoRepeatInterval(int) |
另请参阅 autoRepeat 和autoRepeatDelay 。
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) |
成员函数文档
[explicit] QAbstractButton::QAbstractButton(QWidget *parent = nullptr)
创建一个带有parent 的抽象按钮。
[virtual noexcept] QAbstractButton::~QAbstractButton()
销毁该按钮。
[slot] void QAbstractButton::animateClick()
执行一次动画点击:按钮立即被按下,并在100毫秒后松开。
在按钮释放之前再次调用此函数将重置释放计时器。
与点击相关的所有信号都会在适当的时候触发。
如果按钮处于disabled.
另请参阅 click()。
[override virtual protected] void QAbstractButton::changeEvent(QEvent *e)
重写了:QWidget::changeEvent(QEvent *event)。
[virtual protected] void QAbstractButton::checkStateSet()
当调用setChecked()时,会调用此虚拟处理程序,除非该调用是在nextCheckState()内部进行的。它允许子类重置其按钮的中间状态。
另请参阅 nextCheckState()。
[slot] void QAbstractButton::click()
执行一次点击操作。
将根据需要发出与单击相关的所有常规信号。如果该按钮是可选中的,则切换按钮的状态。
如果按钮为disabled.
另请参阅 animateClick()。
[signal] void QAbstractButton::clicked(bool checked = false)
当按钮被激活(即鼠标光标位于按钮内部时按下并松开按钮)、输入快捷键,或者调用click()或animateClick()时,会发出此信号。需要注意的是,如果调用setDown()、setChecked()或toggle(),则不会发出此信号。
如果按钮支持复选,当按钮被选中时,checked 为 true;未被选中时,则为 false。
另请参阅 pressed()、released() 和toggled()。
[override virtual protected] bool QAbstractButton::event(QEvent *e)
重写了:QWidget::event(QEvent *event)。
[override virtual protected] void QAbstractButton::focusInEvent(QFocusEvent *e)
重写了:QWidget::focusInEvent(QFocusEvent *event)。
[override virtual protected] void QAbstractButton::focusOutEvent(QFocusEvent *e)
重写了:QWidget::focusOutEvent(QFocusEvent *event)。
QButtonGroup *QAbstractButton::group() const
返回该按钮所属的组。
如果该按钮不属于任何QButtonGroup ,则此函数返回nullptr 。
另请参阅 QButtonGroup 。
[virtual protected] bool QAbstractButton::hitButton(const QPoint &pos) const
如果 `pos ` 位于可点击按钮矩形内部,则返回 `true `;否则返回 `false`。
默认情况下,可点击区域为整个小部件。子类可以重写此函数,以支持不同形状和大小的可点击区域。
[override virtual protected] void QAbstractButton::keyPressEvent(QKeyEvent *e)
重写了:QWidget::keyPressEvent(QKeyEvent *event)。
[override virtual protected] void QAbstractButton::keyReleaseEvent(QKeyEvent *e)
重写了:QWidget::keyReleaseEvent(QKeyEvent *event)。
[override virtual protected] void QAbstractButton::mouseMoveEvent(QMouseEvent *e)
重写了:QWidget::mouseMoveEvent(QMouseEvent *event)。
[override virtual protected] void QAbstractButton::mousePressEvent(QMouseEvent *e)
重写了:QWidget::mousePressEvent(QMouseEvent *event)。
[override virtual protected] void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
重写了:QWidget::mouseReleaseEvent(QMouseEvent *event)。
[virtual protected] void QAbstractButton::nextCheckState()
当按钮被点击时,会调用此虚拟处理程序。如果按钮处于isCheckable()状态,则默认实现会调用setChecked(!isChecked())。这允许子类实现按钮的中间状态。
另请参阅 checkStateSet()。
[override pure virtual protected] void QAbstractButton::paintEvent(QPaintEvent *e)
重写了:QWidget::paintEvent(QPaintEvent *event)。
[signal] void QAbstractButton::pressed()
按下按钮时会发出此信号。
[signal] void QAbstractButton::released()
松开按钮时会发出此信号。
另请参阅 pressed()、clicked()、以及toggled()。
[override virtual protected] void QAbstractButton::timerEvent(QTimerEvent *e)
重写了:QObject::timerEvent(QTimerEvent *event)。
[slot] void QAbstractButton::toggle()
切换可选中按钮的状态。
另请参阅 checked 。
[signal] void QAbstractButton::toggled(bool checked)
每当一个可选中按钮的状态发生变化时,都会触发此信号。如果按钮被选中,checked 为 true;如果按钮未被选中,则为 false。
这可能是用户操作、click() 槽激活,或者因为调用了setChecked() 的结果。
在发出此信号之前,互斥按钮组中按钮的状态会先被更新。这意味着,槽函数可以响应该组中状态发生变化的按钮发出的“off”信号或“on”信号。
例如,可以使用以下模式实现一个槽:该槽对新被选中的按钮发出的信号做出反应,但忽略来自已取消选中按钮的信号:
void MyWidget::reactToToggle(bool checked)
{
if (checked) {
// Examine the new button states.
...
}
}可以使用QButtonGroup 类创建按钮组,并通过QButtonGroup::buttonClicked()信号监听按钮状态的更新。
注意: 属性checked 的Notifier 信号。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.