QAbstractButton Class
QAbstractButton 是按钮widget的抽象基类, 提供按钮的常见功能. 更多...
头文件: | #include <QAbstractButton> |
qmake: | QT += widgets |
基类: | QWidget |
派生类: |
属性
|
公有函数
QAbstractButton(QWidget *parent = Q_NULLPTR) | |
~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 |
- 214 个公有函数继承自 QWidget
- 32 个公有函数继承自 QObject
- 14 个公有函数继承自 QPaintDevice
公有槽函数
void | animateClick(int msec = 100) |
void | click() |
void | setChecked(bool) |
void | setIconSize(const QSize &size) |
void | toggle() |
信号
受保护的函数
virtual void | checkStateSet() |
virtual bool | hitButton(const QPoint &pos) const |
virtual void | nextCheckState() |
重新实现的受保护函数
virtual void | changeEvent(QEvent *e) |
virtual bool | event(QEvent *e) |
virtual void | focusInEvent(QFocusEvent *e) |
virtual void | focusOutEvent(QFocusEvent *e) |
virtual void | keyPressEvent(QKeyEvent *e) |
virtual void | keyReleaseEvent(QKeyEvent *e) |
virtual void | mouseMoveEvent(QMouseEvent *e) |
virtual void | mousePressEvent(QMouseEvent *e) |
virtual void | mouseReleaseEvent(QMouseEvent *e) |
virtual void | paintEvent(QPaintEvent *e) = 0 |
virtual void | timerEvent(QTimerEvent *e) |
- 35 个受保护的函数继承自 QWidget
- 9 个受保护的函数继承自 QObject
- 1 个受保护的函数继承自 QPaintDevice
其他继承的成员
- 1 个公有变量继承自 QObject
- 5 个静态公有成员继承自 QWidget
- 10 个静态公有成员继承自 QObject
- 1 个受保护的槽函数继承自 QWidget
- 2 个受保护的变量继承自 QObject
- 1 protected type inherited from QPaintDevice
详细描述
QAbstractButton 是按钮widget的抽象基类, 提供按钮的常见功能.
这个类实现一个 抽象 按钮. 子类处理用户操作, 并定义如何绘制按钮.
QAbstractButton 支持普通按钮和选中按钮. 选中按钮是QRadioButton 和 QCheckBox . 普通按钮是 QPushButton 和 QToolButton ; 如果需要, 它们可以相互转换.
任何按钮都能显示文本和图标. setText() 设置文本; setIcon() 设置图标. 如果按钮被禁用, 它的标签变成 "disabled" 外观.
如果按钮的文本包含前缀'&', 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 和 icons.
在对话框中, 你可以调用 QPushButton::setDefault() 和 QPushButton::setAutoDefault()将按钮设置为默认按钮.
QAbstractButton 提供按钮的大部分状态:
- isDown() 表示按钮是否被 按下 .
- isChecked() 表示按钮是否被 选中. 仅有可选按钮才支持这种状态.
- isEnabled() 表示按钮是否可以被用户按下.
注意: 不同于其他widget, QAbstractButton 的派生类在禁用时接收鼠标和上下文菜单事件.
- setAutoRepeat() 设置按钮在用户按下时, 是否自动重复发送按下事件. autoRepeatDelay 和 autoRepeatInterval 定义如何自动重复.
- setCheckable() 设置按钮是否可以被选中.
isDown() 和 isChecked() 的区别: 当用户单击一个可被选中的按钮时, 按钮先产生 按下 事件, 用户释放按钮后, 按钮切入 选中 状态. 当用户再次单机按钮时, 按钮先产生 按下 事件, 用户释放按钮后, 按钮切入 未选中 状态 (isChecked() 和 isDown() 都返回 false).
QAbstractButton 提供四种信号:
- pressed() : 光标在按钮中, 并按下鼠标左键.
- released() : 释放鼠标左键.
- clicked() : 按钮首次按下并释放; 按下快捷键; 调用 click() 函数; 调用 animateClick() 函数.
- toggled() : 切换按钮的状态发生改变.
定义 QAbstractButton 的子类时, 你必须重新实现 paintEvent() , 绘制按钮的边框和它的显示文本或图标. Qt提倡重新实现 sizeHint(), 有时也需要实现 hitButton() (检测按下是否在按钮内). 对于具有两种以上状态的按钮, 你还必须重新实现 checkStateSet() 和 nextCheckState().
参见 QButtonGroup.
属性
autoExclusive : bool
按钮是否启动自动独占性
如果启用 autoExclusivi, 父对象相同的选中按钮就像分组一样. 在一个独占按钮分组中, 任何时候只能选中一个按钮; 选中其他按钮自动取消前一个选中按钮.
The property has no effect on buttons that belong to a button group.
除了单选按钮, autoExclusive 默认关闭.
访问函数:
bool | autoExclusive() const |
void | setAutoExclusive(bool) |
参见 QRadioButton.
autoRepeat : bool
按钮是否启动自动重复
如果启动 autoRepeat , 那么在按下按钮时, Qt会定期发送信号(pressed(), released(), 和 clicked()) . autoRepeat 默认关闭. 初始延迟时间(ms)和重复间隔时间(ms)由 autoRepeatDelay 和 autoRepeatInterval定义.
注意: 如果一个按钮被快捷键触发按下动作, 那么自动重复的启用和时间由系统定义, 跟该类无关. 信号( pressed(), released(), and clicked() ) 正常发送.
访问函数:
bool | autoRepeat() const |
void | setAutoRepeat(bool) |
autoRepeatDelay : int
自动重复的初始延迟时间
如果启用 autoRepeat , autoRepeatDelay 在自动重复以前定义初始延迟时间(ms).
这个属性从 Qt 4.2 开始介绍.
访问函数:
int | autoRepeatDelay() const |
void | setAutoRepeatDelay(int) |
参见 autoRepeat and autoRepeatInterval.
autoRepeatInterval : int
自动重复的间隔时间
如果启用 autoRepeat , autoRepeatInterval 定义自动重复的间隔时间(ms).
这个属性从 Qt 4.2 开始介绍.
访问函数:
int | autoRepeatInterval() const |
void | setAutoRepeatInterval(int) |
参见 autoRepeat 和 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
, 那么按钮被按下. 如果你将这个属性设置为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) |
成员函数
QAbstractButton::QAbstractButton(QWidget *parent = Q_NULLPTR)
构造函数.
参数 parent 父对象.
QAbstractButton::~QAbstractButton()
析构函数.
[slot]
void QAbstractButton::animateClick(int msec = 100)
点击事件的执行过程: 按钮被立即按下, msec 后释放 (默认是 100 ms).
按钮释放之前调用这个函数重置释放时间.
所有与点击相关的信号被适时发送.
如果禁用按钮 , 该函数不执行任何操作.
参见 click().
[virtual protected]
void QAbstractButton::changeEvent(QEvent *e)
重新实现 QWidget::changeEvent().
[virtual protected]
void QAbstractButton::checkStateSet()
如果不是从nextCheckState()内部调用 setChecked() 函数, Qt会调用该函数. 它允许派生类重置它们的中间按钮状态.
参见 nextCheckState().
[slot]
void QAbstractButton::click()
执行点击动作.
所有与点击相关的信号被适时发送. 如果按钮是可选中的, 更改选中状态.
如果禁用按钮 , 该函数不执行任何操作.
参见 animateClick().
[signal]
void QAbstractButton::clicked(bool checked = false)
信号触发情况: 光标在按钮内,按下再释放按钮; 按下快捷键; 调用click(); 调用 animateClick(). 通常情况下, 你调用 setDown(), setChecked() 或 toggle(), 不会发送这个信号.
按钮是可选中的, 按钮被选中时, checked 是 true, 否则是 false .
参见 pressed(), released() 和 toggled().
[virtual protected]
bool QAbstractButton::event(QEvent *e)
重新实现 QObject::event().
[virtual protected]
void QAbstractButton::focusInEvent(QFocusEvent *e)
重新实现 QWidget::focusInEvent().
[virtual protected]
void QAbstractButton::focusOutEvent(QFocusEvent *e)
重新实现 QWidget::focusOutEvent().
QButtonGroup *QAbstractButton::group() const
返回按钮归属的组.
如果按钮不属于任何 QButtonGroup, 这个函数返回 0.
参见 QButtonGroup.
[virtual protected]
bool QAbstractButton::hitButton(const QPoint &pos) const
true
表示 pos 在按钮的可点击矩形区内; 否则返回 false
.
默认情况下, 可点击区域是整个按钮. 子类中重新实现这个函数实现自定义点击区域的形状和大小.
[virtual protected]
void QAbstractButton::keyPressEvent(QKeyEvent *e)
重新实现 QWidget::keyPressEvent().
[virtual protected]
void QAbstractButton::keyReleaseEvent(QKeyEvent *e)
重新实现 QWidget::keyReleaseEvent().
[virtual protected]
void QAbstractButton::mouseMoveEvent(QMouseEvent *e)
重新实现 QWidget::mouseMoveEvent().
[virtual protected]
void QAbstractButton::mousePressEvent(QMouseEvent *e)
重新实现 QWidget::mousePressEvent().
[virtual protected]
void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
重新实现 QWidget::mouseReleaseEvent().
[virtual protected]
void QAbstractButton::nextCheckState()
按钮被点击时, 调用这个函数. 如果按钮是可选中的isCheckable(), 默认实现是调用 setChecked(!isChecked()). 派生类可以重新实现这个函数定义立即按钮状态.
参见 checkStateSet().
[pure virtual protected]
void QAbstractButton::paintEvent(QPaintEvent *e)
重新实现 QWidget::paintEvent().
[signal]
void QAbstractButton::pressed()
按钮按下时发送这个信号.
[signal]
void QAbstractButton::released()
按钮释放时发送这个信号.
参见 pressed(), clicked() 和 toggled().
[virtual protected]
void QAbstractButton::timerEvent(QTimerEvent *e)
重新实现 QObject::timerEvent().
[slot]
void QAbstractButton::toggle()
改变按钮的可选中状态.
参见 checked.
[signal]
void QAbstractButton::toggled(bool checked)
按钮的可选中状态改变时发送这个信号. 如果按钮被选中, checked 是 true, 否则 false.
这个可能由一个用户动作产生, 调用 click() 或者调用 setChecked() .
信号发送之前, Qt会更新独占性分组中的按钮状态. 这就意味着槽函数可以判断按钮的选中状态.
槽函数可以使用如下示例的模式, 仅处理按钮的选中状态信号, 忽略未选中状态信号:
void MyWidget::reactToToggle(bool checked) { if (checked) { // Examine the new button states. ... } }
按钮分组使用 QButtonGroup 创建, 改变分组中按钮的状态会发送信号 QButtonGroup::buttonClicked().
注意: 这是checked的通知信号.