QAbstractButton Class

QAbstractButton 类是按钮部件的抽象基类,提供按钮的通用功能。更多

头文件: #include <QAbstractButton>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QWidget
继承者:

QCheckBox,QPushButton,QRadioButton, 以及QToolButton

属性

公共功能

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()

信号

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) 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 支持按压式按钮和可选中(切换)按钮。可选中按钮在QRadioButtonQCheckBox 类中实现。按钮在QPushButtonQToolButton 类中实现;如果需要,这些类还提供切换行为。

任何按钮都可以显示包含文本和图标的标签。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) 都可以同时显示texticons

通过QPushButton::setDefault() 和QPushButton::setAutoDefault() 可以使按钮成为对话框中的默认按钮。

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

  • isDown() 表示按钮是否按下
  • isChecked() 表示按钮是否被选中。只有可选中按钮可以选中和取消选中(见下文)。
  • isEnabled() 表示用户是否可以按下按钮。

    注: 与其他部件不同,从 QAbstractButton 派生的按钮在禁用时接受鼠标和上下文菜单事件。

  • setAutoRepeat()设置如果用户按住按钮,按钮是否会自动重复。autoRepeatDelayautoRepeatInterval 定义了自动重复的方式。
  • setCheckable() 设置按钮是否为切换按钮。

isDown() 和isChecked() 的区别如下。当用户单击切换按钮进行选中时,按钮首先被按下,然后被释放到选中状态。当用户再次点击它(取消选中)时,按钮会先移动到按下状态,然后再移动到取消选中状态(isChecked() 和isDown() 都是 false)。

QAbstractButton 提供了四个信号:

  1. pressed(当鼠标光标位于按钮内时按下鼠标左键,会发出()信号。
  2. released(释放鼠标左键时发出()信号。
  3. clicked(当第一次按下按钮然后松开、键入快捷键或调用click() 或animateClick() 时,会发出()信号。
  4. toggled(当切换按钮的状态发生变化时,会发出()。

要子类化 QAbstractButton,您必须至少重新实现paintEvent() 以绘制按钮的轮廓及其文本或像素图。一般来说,最好也重新实现sizeHint() 以及hitButton() (用于确定按钮是否按下)。对于具有两种以上状态的按钮(如三态按钮),您还需要重新实现checkStateSet() 和nextCheckState()。

另请参见 QButtonGroup

属性文档

autoExclusive : bool

该属性表示是否启用自动排他性。

如果启用了自动排他性,属于同一父 widget 的可选中按钮的行为就如同它们是同一排他性按钮组的一部分。在一个排他性按钮组中,任何时候都只能选中一个按钮;选中另一个按钮会自动取消选中之前选中的按钮。

该属性对属于按钮组的按钮不起作用。

autoExclusive 默认为关闭,单选按钮除外。

访问功能:

bool autoExclusive() const
void setAutoExclusive(bool)

另请参阅 QRadioButton

autoRepeat : bool

该属性用于确定是否启用自动重放功能。

如果启用了自动重复,那么当按钮按下时,pressed(),released(), 和clicked() 信号将以固定间隔发出。默认情况下自动重复是关闭的。初始延迟和重复间隔由autoRepeatDelayautoRepeatInterval 以毫秒为单位定义。

注:如果按钮是通过快捷键按下的,则自动重复由系统而非该类启用和计时。pressed(),released(), 和clicked() 信号将像正常情况下一样发出。

访问功能:

bool autoRepeat() const
void setAutoRepeat(bool)

autoRepeatDelay : int

该属性用于保存自动重复的初始延迟。

如果启用了autoRepeat ,则 autoRepeatDelay 定义了自动重复开始前的初始延迟(以毫秒为单位)。

访问函数:

int autoRepeatDelay() const
void setAutoRepeatDelay(int)

另请参阅 autoRepeatautoRepeatInterval

autoRepeatInterval : int

该属性表示自动重复的间隔时间。

如果autoRepeat 已启用,则 autoRepeatInterval 定义了以毫秒为单位的自动重复时间间隔长度。

访问函数:

int autoRepeatInterval() const
void setAutoRepeatInterval(int)

另请参阅 autoRepeatautoRepeatDelay

checkable : bool

该属性表示按钮是否可选中

默认情况下,按钮不可校验。

访问功能:

bool isCheckable() const
void setCheckable(bool)

另请参阅 checked

checked : bool

该属性表示按钮是否被选中

只有可选中按钮才能被选中。默认情况下,按钮未被选中。

访问功能:

bool isChecked() const
void setChecked(bool)

Notifier 信号:

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()

除非在nextCheckState() 中调用,否则在使用setChecked() 时会调用此虚拟处理程序。它允许子类重置中间按钮状态。

另请参见 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()

按下按钮时会发出该信号。

另请参阅 released() 和clicked()。

[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() 的结果。

专属按钮组中按钮的状态会在该信号发出前更新。这意味着插槽既可以根据 "关闭 "信号采取行动,也可以根据状态发生变化的按钮组发出的 "打开 "信号采取行动。

例如,一个槽可以对新选中的按钮发出的信号做出反应,但忽略未选中的按钮发出的信号,可以使用以下模式实现:

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

可使用QButtonGroup 类创建按钮组,并使用QButtonGroup::buttonClicked() 信号监控按钮状态的更新。

注: 用于属性checked 的通知器信号。

另请参阅 checkedclicked()。

© 2025 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.