QAbstractButton类是按钮控件的抽象基类,提供按钮通用的功能。
Header: | #include <QAbstractButton> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Inherits: | |
Inherited By: | 复选按钮 QCheckBox 普通按钮 QPushButton >>> 单选按钮 QRadioButton 工具栏按钮 QToolButton |
【详细说明】
QAbstractButton类是按钮控件的基类,它实现一个抽象按钮,它的子类处理用户操作,由用户指定如何绘制按钮。
QAbstractButton 提供对普通按钮和可检查(可切换)按钮的支持。可检查按钮在 QRadioButton 和QCheckBox 类中实现。普通按钮在 QPushButton和QToolButton类中实现,如果需要,它们还提供切换行为。
任何按钮都可以显示包含文本和图标的标签。
setText() 设置文本;
setIcon() 设置图标。
如果按钮被禁用,其"disabled" 标签将被更改,使按钮具有“禁用”外观。
如果该按钮是一个文本按钮,并且其中包含(“&”),则该按钮会自动创建一个快捷键。
QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this);
如上,快捷方式被分配给按钮,当用户按下Alt+C时该按钮将调用animateClick()(参阅 QShortcut)。
可使用“&&”显示实际的&字符。
对于没有任何文本的按钮,用户还可以用setShortcut() 函数来设置自定义快捷键。
button->setIcon(QIcon(":/images/print.png")); button->setShortcut(tr("Alt+F7"));
Qt提供的所有(4种)按钮都可以同时显示 text 和 icons。
可以通过 QPushButton::setDefault()和 QPushButton::setAutoDefault() 将按钮设为对话框中的默认按钮。
★ QAbstractButton 提供用于按钮的大多数状态:
- isDown() 指示是否按下该按钮。
- isChecked() 表示是否是“可检查”按钮,即:只能选中和取消选中的按钮(见下文)。
- isEnabled() 是否可用,即用户是否可以按下该按钮。
- setAutoRepeat() 设置用户按住按钮是否会自动重复。自动重复延迟 autoRepeatDelay和 自动重复间隔autoRepeatInterval 定义了如何完成自动重复。
- setCheckable() 可设置该按钮是否为切换按钮。
注意:与其他控件不同,从QAbstractButton类派生的按钮在禁用时也接受鼠标和上下文菜单事件。
★ isDown() ()和isChecked() 的区别如下。当用户单击一个可切换按钮进行检查时,首先按下pressed该按钮,然后释放到选中checked状态。当用户再次单击它(取消选中它)时,按钮首先是按下pressed状态,然后进入未选中unchecked状态(isChecked()和 isDown() 都是false)。
QAbstractButton类提供四个信号:
★ 实现QAbstractButton的子类时,必须重新实现 paintEvent() 以绘制按钮的轮廓及其文本或像素图。通常建议重新实现“控件推荐尺寸” sizeHint() ,有时也建议重新实现“可点击区域”hitButton() (以确定按下动作是否在按钮内)。对于具有两个以上状态的按钮(如三态按钮),您还须重新实现检查状态checkStateSet() 和下一个检查状态nextCheckState()。
【属性】
autoExclusive : bool | 此属性保存是否启用了自动独占性。除单选按钮外,自动独占性默认处于关闭状态。 如果启用了自动独占性,则属于同一父控件的可检查按钮的行为就像它们是同一独占按钮组的一部分一样。在专属按键组中,任何时候只能勾选一个按键;选中另一个按钮会自动取消选中之前选中的按钮。 |
autoRepeat : bool | 此属性决定是否启用自动重复。 如果启用了自动重复,则 pressed(), released()和 clicked()按钮按下时,会定期发出信号。默认情况下,自动重复是关闭的。初始延迟和重复间隔由autoRepeatDelay 和 autoRepeatInterval.下式义,单位为毫秒。 注意:如果通过快捷键按下按钮,则自动重复由系统而不是该类启用和计时。 |
autoRepeatDelay : int | 该属性保存自动重复的初始延迟,如 autoRepeat 当前可用,则由此属性定义自动重复开始之前的初始延迟(毫秒)。 |
autoRepeatInterval : int | 该属性保存自动重复的间隔。 如 autoRepeat 当前可用,则由此属性定义自动重复间隔的长度。 |
checkable : bool | 该属性决定按钮是否"可检查",默认按钮不可检查。 |
checked : bool | 该属性保存按钮是否被选中。 只能检查”可检查“的按钮。默认按钮处于未选中状态。 |
down : bool | 该属性保存按钮是否被按下。 按钮被按下时该属性为 |
icon : QIcon | 该属性保存按钮图标。 图标的默认大小由GUI样式定义,但可以设置iconSize。 |
iconSize : QSize | 该属性保存用于该按钮的图标大小。 这是图标的最大尺寸,较小的图标并不会被放大。 |
shortcut : QKeySequence | 此属性保存与按钮关联的快捷方式。 |
text : QString | 该属性保存按钮上显示的文本。 如果按钮没有文本,text()函数将返回一个空字符串。 如果文本包含一个(&),将自动为其创建一个快捷方式。“&”后面的字符将用作快捷键。如果文本没有定义快捷方式,任何以前的快捷方式都将被覆盖或清除。要显示实际的&符号,请使用“&&”。 |
【公共函数】
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() | 执行按下按钮动作,并在 100 毫秒后松开。发出与点击相关的信号。在松开按钮之前再次调用此函数将重置释放计时器。如果按钮是 disabled,则不执行任何操作。 |
void | click() | 执行单击。发出与点击相关的信号。如果按钮可选中,则切换按钮的状态。 如果按钮是 disabled,则不执行任何操作。 |
void | setChecked(bool) | 设置选中按钮状态。 |
void | setIconSize(const QSize &size) | 设置图标尺寸。 |
void | toggle() | 切换可检查按钮的状态。 |
【信号】
void | clicked(bool checked = false) | 当按钮被激活时(当鼠标光标在按钮内时按下然后松开),键入快捷键或调用 click() 或 animateClick()时,会发出此信号。值得注意的是,如果调用 l setDown(), setChecked() 或 toggle(),并不会发出此信号。 如果按钮可选中,则为true(如果按钮处于选中状态)或false (如果按钮未选中)。 |
void | pressed() | 按下按钮时会发出此信号。 |
void | released() | 松开按钮时会发出此信号。 |
void | toggled(bool checked) | 属性的通知器信号。每当可检查按钮更改其状态时,都会发出此信号。如果按钮处于选中状态,则为 true;如果按钮未选中,则为 false。 这可能是用户 click()槽激活的结果,也可能是因为调用了 setChecked() 。 在发出此信号之前,会更新独占按钮组中按钮的状态。这意味着槽可以作用于状态已更改的组中的按钮,发出的“关闭”信号或“打开”信号。 例如,可以使用以下模式实现对新选中的按钮发出的信号做出反应但忽略来自未选中按钮的信号的插槽: 可以使用该类创建按钮组 QButtonGroup,并使用 QButtonGroup::buttonClicked() 信号监视按钮状态的更新。 |
【受保护函数】
virtual void | checkStateSet() | 此虚拟处理程序在使用 setChecked() 时调用,除非它是从 nextCheckState() 内部调用的。它允许子类重置其中间按钮状态。 |
virtual bool | hitButton(const QPoint &pos) const | 返回是否在可单击的按钮矩形内。 默认情况下,可点击区域是整个控件。子类可以重新实现此功能,以提供对不同形状和大小的可单击区域的支持。 |
virtual void | nextCheckState() | 单击按钮时调用此虚拟处理程序。默认实现调用 setChecked( ! isChecked()) 如果按钮 isCheckable()。它允许子类实现中间按钮状态。 |
【重实现的保护函数】
virtual void | changeEvent(QEvent *e) override | 重实现了其父类 < QWidget 中对应的虚函数。 |
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 |