QAbstractButton 类

QAbstractButton 类是按钮小部件的抽象基类,提供按钮的公共功能。 更多...

头文件 #include <QAbstractButton>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承自 QWidget
继承自

QCheckBoxQPushButtonQRadioButtonQToolButton

属性

公共函数

QAbstractButton(QWidget *parent = nullptr)
virtual~QAbstractButton()
boolautoExclusive() const
boolautoRepeat() const
intautoRepeatDelay() const
intautoRepeatInterval() const
QButtonGroup *group() const
QIconicon() const
QSizeiconSize() const
boolisCheckable() const
boolisChecked() const
boolisDown() const
voidsetAutoExclusive(bool)
voidsetAutoRepeat(bool)
voidsetAutoRepeatDelay(int)
voidsetAutoRepeatInterval(int)
voidsetCheckable(bool)
voidsetDown(bool)
voidsetIcon(const QIcon &icon)
voidsetShortcut(const QKeySequence &key)
voidsetText(const QString &text)
QKeySequenceshortcut() const
QStringtext() const

公开槽

voidanimateClick()
voidclick()
voidsetChecked(bool)
voidsetIconSize(const QSize &size)
voidtoggle()

信号

voidclicked(bool checked = false)
voidpressed()
voidreleased()
voidtoggled(bool checked)

受保护的函数

virtual voidcheckStateSet()
virtual boolhitButton(const QPoint &pos) const
virtual voidnextCheckState()

重新实现受保护的函数

virtual voidchangeEvent(QEvent *e) override
virtual boolevent(QEvent *e) override
virtual voidfocusInEvent(QFocusEvent *e) override
virtual voidfocusOutEvent(QFocusEvent *e) override
virtual voidkeyPressEvent(QKeyEvent *e) override
virtual voidkeyReleaseEvent(QKeyEvent *e) override
virtual voidmouseMoveEvent(QMouseEvent *e) override
virtual voidmousePressEvent(QMouseEvent *e) override
virtual voidmouseReleaseEvent(QMouseEvent *e) override
virtual voidpaintEvent(QPaintEvent *e) override = 0
virtual voidtimerEvent(QTimerEvent *e) override

详细描述

该类实现了一个抽象按钮。该类的子类处理用户操作并指定按钮的绘制方式。

QAbstractButton为推送按钮和可复选(切换)按钮提供支持。可复选按钮在QRadioButton和QCheckBox类中实现。推送按钮在QPushButton和QToolButton类中实现;如果需要,这些也提供切换行为。

任何按钮都可以显示包含文本和图标标签。setText()设置文本;setIcon()设置图标。如果按钮被禁用,则其标签将改变以使按钮具有“禁用”外观。

如果按钮是带有字符串且包含连字符的文本按钮,QAbstractButton会自动创建快捷键。例如

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

Ctrl+C快捷键被分配给按钮,即,当用户按下Ctrl+C时,按钮将调用animateClick()。有关详细信息,请参阅QShortcut文档。要显示实体的连字符,请使用“&&”。

您还可以使用setShortcut()函数设置自定义快捷键。这对于没有文本的按钮非常有用,因为这些按钮无法自动创建快捷键。

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

Qt提供的所有按钮(QPushButton、QToolButton、QCheckBox和QRadioButton)都可以显示文本和图标。

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

QAbstractButton 提供了按钮大多数使用的状态

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

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

  • setAutoRepeat() 设置按钮是否会在用户按下时自动重复。 autoRepeatDelayautoRepeatInterval 定义了如何进行自动重复。
  • setCheckable() 设置按钮是否是切换按钮。

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

QAbstractButton 提供了四个信号

  1. pressed() 在鼠标左键在按钮内部按下时发出。
  2. released() 在鼠标左键释放时发出。
  3. clicked() 在按钮首次按下然后释放、按下快捷键,或调用 click() 或 animateClick() 时发出。
  4. toggled() 在切换按钮的状态改变时发出。

要继承 QAbstractButton,您必须至少重新实现 paintEvent() 以绘制按钮的轮廓和其文本或图标。通常还建议重新实现 sizeHint(),有时还需要重新实现 hitButton()(以确定按钮点击是否在按钮内)。对于具有超过两个状态(如三态按钮)的按钮,还需要重新实现 checkStateSet() 和 nextCheckState()。

另请参阅 QButtonGroup

属性文档

autoExclusive : bool

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

如果启用自动排他性,属于同一父小部件的可检查按钮的行为就好像它们是同一排它按钮组的一部分。在排它按钮组中,任何给定时间只能选中一个按钮;选中另一个按钮将自动取消选中之前选中的按钮。

该属性对属于按钮组的按钮没有影响。

默认情况下,autoExclusive 是关闭的,除了单选按钮之外。

访问函数

boolautoExclusive() const
voidsetAutoExclusive(bool)

另请参阅 QRadioButton

autoRepeat : bool

该属性表示是否启用自动重复

如果启用自动重复,当按钮按下时,在常规间隔时间内,会发送pressed(),released() 和 clicked() 信号。自动重复默认是关闭的。初始延迟和重复间隔以毫秒为单位由 autoRepeatDelayautoRepeatInterval 定义。

注意:如果按钮通过快捷键按下,则自动重复由系统定时而不是此类控制。在这种情况下,会像正常情况一样发送pressed(),released() 和 clicked() 信号。

访问函数

boolautoRepeat() const
voidsetAutoRepeat(bool)

autoRepeatDelay : int

该属性表示自动重复的初始延迟

如果 autoRepeat 启用,那么 autoRepeatDelay 定义了在自动重复启动之前的延迟时间(以毫秒为单位)。

访问函数

intautoRepeatDelay() const
voidsetAutoRepeatDelay(int)

另请参阅 autoRepeatautoRepeatInterval

autoRepeatInterval : int

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

如果 autoRepeat 启用,那么 autoRepeatInterval 定义了自动重复间隔的长度(以毫秒为单位)。

访问函数

intautoRepeatInterval() const
voidsetAutoRepeatInterval(int)

另请参阅 autoRepeatautoRepeatDelay

checkable : bool

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

默认情况下,按钮不可勾选。

访问函数

boolisCheckable() const
voidsetCheckable(bool)

另请参阅 checked

checked : bool

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

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

访问函数

boolisChecked() const
voidsetChecked(bool)

通知信号

voidtoggled(bool checked)

另请参阅 checkable

down : bool

该属性表示按钮是否被按下

如果此属性为 true,则按钮被按下。如果你将此属性设置为 true,则不会发送pressed() 和 clicked() 信号。默认为 false。

访问函数

boolisDown() const
voidsetDown(bool)

icon : QIcon

该属性表示按钮上显示的图标

图标的默认大小由 GUI 风格定义,但可以通过设置 iconSize 属性进行调整。

访问函数

QIconicon() const
voidsetIcon(const QIcon &icon)

iconSize : QSize

此属性包含用于此按钮的图标大小。

默认大小由GUI样式定义。这是图标的最大大小。较小的图标不会放大。

访问函数

QSizeiconSize() const
voidsetIconSize(const QSize &size)

shortcut : QKeySequence

此属性包含与按钮关联的记忆符。

访问函数

QKeySequenceshortcut() const
voidsetShortcut(const QKeySequence &key)

text : QString

此属性包含按钮上显示的文本。

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

如果文本包含一个和号字符('&'),则会自动为其创建一个快捷键。'&'之后字符将用作快捷键。如果没有由文本定义,任何以前的快捷键将被覆盖或清除。有关详细信息,请参阅QShortcut文档。要显示实际的和号,请使用'&&'。

没有默认文本。

访问函数

QStringtext() const
voidsetText(const QString &text)

成员函数文档

[显式] QAbstractButton::QAbstractButton(QWidget *parent = nullptr)

构造一个具有的抽象按钮。

[虚无异常] QAbstractButton::~QAbstractButton()

销毁按钮。

[槽] void QAbstractButton::animateClick()

执行动画点击:按钮立即按下,并在100ms后释放。

在按钮释放前再次调用此函数将重置释放定时器。

根据适当的情况发出所有与点击相关的信号。

如果按钮禁用。则此函数不执行任何操作。

另请参阅click

[重写虚保护] void QAbstractButton::changeEvent(QEvent *e)

重新实现:QWidget::changeEvent(QEvent *event)。

[虚保护] void QAbstractButton::checkStateSet()

此虚拟处理程序在调用setChecked()时调用,除非它从nextCheckState内部调用。它允许子类重置它们的中间按钮状态。

另请参阅nextCheckState

[槽] void QAbstractButton::click()

执行点击。

根据适当的情况发出所有与点击相关的常规信号。如果按钮是可复选的,则切换按钮的状态。

如果按钮禁用。则此函数不执行任何操作。

另请参阅 animateClick()。

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

当按钮被激活(即按住然后在鼠标光标在按钮内部释放)时,当用户按下快捷键,或者当调用 click() 或 animateClick() 时,将发出此信号。值得注意的是,调用 setDown()、setChecked() 或 toggle() 时,不会发出此信号。

如果按钮可勾选,则 checked 为真表示按钮已被勾选,或为假表示按钮未被勾选。

另请参阅 pressed()、released() 以及 toggled()。

[虚继承受保护] bool QAbstractButton::event(QEvent *e)

重写: QWidget::event(QEvent *event)。

[虚继承受保护] void QAbstractButton::focusInEvent(QFocusEvent *e)

重写: QWidget::focusInEvent(QFocusEvent *event)。

[虚继承受保护] void QAbstractButton::focusOutEvent(QFocusEvent *e)

重写: QWidget::focusOutEvent(QFocusEvent *event)。

QButtonGroup *QAbstractButton::group() const

返回此按钮所属的组。

如果按钮不属于任何 QButtonGroup,则此函数返回 nullptr

另请参阅 QButtonGroup

[虚受保护] bool QAbstractButton::hitButton(const QPoint &pos) const

如果 pos 在可点击按钮矩形内,则返回 true;否则返回 false

默认情况下,可点击区域是整个小部件。子类可以重写此函数以支持不同形状和大小的可点击区域。

[虚继承受保护] void QAbstractButton::keyPressEvent(QKeyEvent *e)

重写: QWidget::keyPressEvent(QKeyEvent *event)。

[虚继承受保护] void QAbstractButton::keyReleaseEvent(QKeyEvent *e)

重写: QWidget::keyReleaseEvent(QKeyEvent *event)。

[虚继承受保护] void QAbstractButton::mouseMoveEvent(QMouseEvent *e)

重实现:QWidget::mouseMoveEvent(QMouseEvent *event).

[重载虚拟保护] void QAbstractButton::mousePressEvent(QMouseEvent *e)

重实现:QWidget::mousePressEvent(QMouseEvent *event).

[重载虚拟保护] void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)

重实现:QWidget::mouseReleaseEvent(QMouseEvent *event).

[虚拟保护] void QAbstractButton::nextCheckState()

此虚拟处理器是在按钮被点击时调用的。默认实现如果按钮是可复选的,则调用 setChecked(!isChecked())。这允许子类实现按钮的中间状态。

请参阅 checkStateSet().

[重载虚拟保护] void QAbstractButton::paintEvent(QPaintEvent *e)

重实现:QWidget::paintEvent(QPaintEvent *event).

[信号] void QAbstractButton::pressed()

当按钮被按下时发出此信号。

请参阅 released() 和 clicked().

[信号] void QAbstractButton::released()

当按钮被释放时发出此信号。

请参阅 pressed(),clicked() 和 toggled().

[重载虚拟保护] void QAbstractButton::timerEvent(QTimerEvent *e)

重实现:QObject::timerEvent(QTimerEvent *event).

[槽] void QAbstractButton::toggle()

切换可复选按钮的状态。

另请参阅 checked

[信号] 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

© 2024 Qt 公司有限公司。本文件中包含的文档贡献者享有其相应版权。本文件提供的文档按照自由软件基金会发布的 GNU自由文档许可协议版本1.3 的条款进行授权。Qt 和相应的商标是芬兰以及全球其他地区的 Qt 公司有限公司的商标。所有其他商标归其各自所有者所有。