QAbstractButton 类

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

头: #include <QAbstractButton>
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 (int msec = 100)
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);
					

The 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 定义在自动重复反冲之前的初始延迟 (以毫秒为单位)。

该特性在 Qt 4.2 引入。

访问函数:

int autoRepeatDelay () const
void setAutoRepeatDelay ( int )

另请参阅 autoRepeat and autoRepeatInterval .

autoRepeatInterval : int

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

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

该特性在 Qt 4.2 引入。

访问函数:

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 ( int msec = 100)

履行动画点击:立即按下按钮,然后释放在 msec 毫秒后 (默认为 100 ms)。

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

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

此函数什么都不做若按钮 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 ().

[虚拟] 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).