QAbstractButton 类

QAbstractButton 类是按钮 Widget 抽象基类,为按钮提供公共功能。 更多...

头: #include <QAbstractButton>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED)
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

详细描述

此类实现 abstract 按钮。此类的子类处理用户动作,并指定如何绘制按钮。

QAbstractButton 为按钮和可复选 (触发) 按钮提供支持。可复选按钮的实现在 QRadioButton and QCheckBox 类。按钮的实现在 QPushButton and 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 and icons .

可以把按钮设为对话框默认按钮通过 QPushButton::setDefault () 和 QPushButton::setAutoDefault ().

QAbstractButton 提供用于按钮的大多数状态:

  • isDown () 指示按钮是否 pressed 下。
  • isChecked () 指示按钮是否 checked 。只有可复选按钮可以被复选或取消复选 (见下文)。
  • isEnabled () 指示用户是否可以按下按钮。

    注意: 与其它 Widget 相反,按钮派生自 QAbstractButton 接受鼠标和上下文菜单事件当被禁用时。

  • setAutoRepeat () 设置按钮是否会自动重复若用户按下按钮。 autoRepeatDelay and autoRepeatInterval 定义自动重复如何做。
  • setCheckable () 设置按钮是否为可触发按钮。

差异在 isDown () 和 isChecked () 如下所示。当用户点击触发按钮以复选时,按钮首先 pressed 然后释放到 checked 状态。当用户再次点击它 (以取消复选) 时,按钮先被移到 pressed 状态,然后到 unchecked 状态 ( isChecked () 和 isDown () 两者为 false)。

QAbstractButton 提供 4 个信号:

  1. pressed () 被发射当鼠标光标在按钮内时按下鼠标左键。
  2. released () 被发射当释放鼠标左键时。
  3. clicked () 被发射当首次按下然后释放按钮时,当键入快捷键时或当 click () 或 animateClick () 被调用。
  4. toggled () 被发射当触发按钮状态改变时。

要子类 QAbstractButton,必须至少重实现 paintEvent () 以绘制按钮轮廓及其文本或像素图。通常明智的是重实现 sizeHint (),且有时是 hitButton () (以确定按钮按下是否在按钮内)。对于具有 2 种以上状态的按钮 (像 3 状态按钮),还必须重实现 checkStateSet () 和 nextCheckState ().

另请参阅 QButtonGroup .

特性文档编制

autoExclusive : bool

此特性保持是否启用自动独占

若自动独占被启用,属于同一父级 Widget 的可复选按钮的行为就像它们属于同一独占按钮组。在独占按钮组中,任何时候只能复选一按钮;复选另一按钮,自动取消复选先前复选的按钮。

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

默认情况下,autoExclusive (自动独占) 是关闭的,除单选按钮外。

访问函数:

bool autoExclusive () const
void setAutoExclusive (bool)

另请参阅 QRadioButton .

autoRepeat : bool

此特性保持是否启用 autoRepeat

若 autoRepeat 被启用,那么 pressed (), released (),和 clicked () 信号将按定期间隔发射当按钮被按下时。autoRepeat 默认情况下是关闭的。初始延迟和重复间隔以毫秒为单位定义通过 autoRepeatDelay and autoRepeatInterval .

注意:若按钮被快捷键按下,那么自动重复是被系统而不是此类启用和计时。 pressed (), released (),和 clicked () 信号将像在正常情况下一样被发射。

访问函数:

bool autoRepeat () const
void setAutoRepeat (bool)

autoRepeatDelay : int

此特性保持自动重复的初始延迟

autoRepeat 被启用,那么 autoRepeatDelay 定义在自动重复反冲之前的初始延迟 (以毫秒为单位)。

访问函数:

int autoRepeatDelay () const
void setAutoRepeatDelay (int)

另请参阅 autoRepeat and autoRepeatInterval .

autoRepeatInterval : int

此特性保持自动重复的间隔

autoRepeat 被启用,autoRepeatInterval 将定义自动重复间隔的长度 (以毫秒为单位)。

访问函数:

int autoRepeatInterval () const
void setAutoRepeatInterval (int)

另请参阅 autoRepeat and 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 ,按钮被按下。信号 pressed () 和 clicked () 不被发射若将此特性设为 true。默认为 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 = nullptr)

构造抽象按钮采用 parent .

[slot] void QAbstractButton:: animateClick ()

履行动画点击:按钮被立即按下,并在 100 毫秒后释放。

在按钮被释放之前,再次调用此函数会重置释放计时器。

会酌情发射点击关联的所有信号。

此函数什么都不做若按钮 disabled.

另请参阅 click ().

[slot] void QAbstractButton:: click ()

履行点击。

与点击关联的所有寻常信号都会适当发射。若按钮可复选,触发按钮状态。

此函数什么都不做若按钮 disabled.

另请参阅 animateClick ().

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

此信号被发射当被激活 (即:按下然后释放当鼠标光标在按钮内时) 时,当键入快捷键时,或当 click () 或 animateClick () 被调用。显而易见,此信号 not 被发射若调用 setDown (), setChecked () 或 toggle ().

若按钮是可复选的, checked 为 true 若按钮被复选,或 false 若按钮未被复选。

另请参阅 pressed (), released (),和 toggled ().

[signal] void QAbstractButton:: pressed ()

此信号被发射当按钮被按下。

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

[signal] void QAbstractButton:: released ()

此信号被发射当按钮被释放。

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

[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 .

另请参阅 checked and clicked ().

[virtual] QAbstractButton:: ~QAbstractButton ()

销毁按钮。

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

重实现: QWidget::changeEvent (QEvent *event).

[virtual protected] void QAbstractButton:: checkStateSet ()

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

另请参阅 nextCheckState ().

[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

返回 true if pos 在可点击按钮矩形内;否则返回 false .

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

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

调用此虚拟处理程序,当点击按钮时。默认实现调用 setChecked (! isChecked ()) 若按钮 isCheckable ()。它允许子类实现中间按钮状态。

另请参阅 checkStateSet ().

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

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

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

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