一、描述
按钮的抽象类。此类的子类处理用户操作,并指定按钮的绘制方式。
如果按钮是文本按钮,字符串中包含与号 ('&'),则 QAbstractButton 会自动创建一个快捷键。
QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this);
Alt+C 快捷键分配给按钮,即当用户按下 Alt+C 时,按钮将调用 animateClick()。(要显示实际的&符号,使用“&&”)
还可以使用 setShortcut() 函数设置自定义快捷键。这主要用于没有任何文本的按钮。
button->setIcon(QIcon(":/images/print.png"));
button->setShortcut(tr("Alt+F7"));
与其他小部件相反不同,从 QAbstractButton 派生的按钮在禁用时将接受鼠标和上下文菜单事件。
要继承 QAbstractButton:
- 必须至少重新实现 paintEvent() 以绘制按钮的轮廓及其文本或像素图
- 通常建议重新实现 sizeHint() ,有时也重新实现 hitButton()(确定按下是否在按钮范围内)
- 对于具有两个以上状态的按钮(如三态按钮),还必须重新实现 checkStateSet() 和 nextCheckState()
二、属性成员
1、autoExclusive : bool
是否启用互斥。默认为 false,单选按钮(QRadioButton)除外。
如果启用了互斥,则属于同一父小部件的可切换状态按钮(checkable = true)的行为就好像它们是同一排他按钮组的一部分。在一个专属按钮组中,任何时候只能选中一个按钮。
该属性对属于按钮组的按钮没有影响。
2、autoRepeat : bool
是否启用自动重复。默认为 false
如果启用了自动重复,则当按钮按下时,pressed()、released() 和 clicked() 信号会定期发出。初始延迟和重复间隔由 autoRepeatDelay 和 autoRepeatInterval 以毫秒为单位定义。
如果通过快捷键按下按钮,则自动重复由系统启用和计时,而不是由此类启用。pressed()、released() 和 clicked() 信号将像正常情况一样发出。
3、autoRepeatDelay : int
自动重复的初始延迟。
4、autoRepeatInterval : int
自动重复的间隔。
5、checkable : bool
是否可切换状态,即是否可切换选中/未选中状态。默认为false。
6、checked : bool
按钮是否被选中。按钮一般有两状态(有的是三态):选中/未选中。
7、down : bool
按钮是否被按下。默认为false。如果设置为 true,则不会发出 press() 和 clicked()信号。
8、icon : QIcon
按钮上显示的图标。图标的默认大小由 GUI 样式定义,但可以通过此属性进行调整。
9、iconSize : QSize
此按钮图标的最大尺寸。较小的图标不会放大。
10、shortcut : QKeySequence
与按钮关联的助记符。
11、text : QString
按钮上显示的文本。
三、成员函数
1、 void animateClick()
执行动画点击:立即按下按钮,并在 100 毫秒后释放。
在释放按钮之前再次调用此函数会重置释放计时器。
与点击相关的所有信号都会适当地发出。
如果按钮被禁用,此功能将不执行任何操作。
2、void click()
执行单击。
与点击相关的所有常用信号都会适当地发出。
如果按钮是可切换状态的的,则按钮的状态被切换。
如果按钮被禁用,此功能将不执行任何操作。
3、【信号】void clicked(bool checked = false)
当按钮被激活(即,当鼠标光标在按钮内时按下然后释放)、键入快捷键或调用 click() 或 animateClick() 时,会发出此信号。
如果调用 setDown()、setChecked() 或 toggle(),则不会发出此信号。
如果按钮是可切换状态的,如果选中,checked 为true,如果未选中,则为false。
4、【信号】void pressed()
按下按钮时会发出此信号。
5、【信号】void released()
松开按钮时发出此信号。
6、void toggle()
切换(可切换状态)按钮的状态。
7、【信号】void toggled(bool checked)
每当可切换状态按钮更改其状态时,就会发出此信号。如果按钮被选中,checked 为true,如果按钮未选中,则为false。
这可能是用户操作、click() 槽激活的结果,或者因为调用了 setChecked()。
8、【virtual】void checkStateSet()
在使用 setChecked() 时被调用。默认为空函数。
它允许子类重置它们的中间按钮状态。
9、QButtonGroup * group()
返回此按钮所属的组。
10、【virtual】bool hitButton(const QPoint &pos)
返回 pos 是否在可点击的按钮矩形内。
默认情况下,可点击区域是整个小部件。子类可以重新实现此功能,以支持不同形状和大小的可点击区域。
11、【virtual】void nextCheckState()
单击按钮时会调用此函数。
它允许子类实现中间按钮状态。
12、【pure virtual】void paintEvent(QPaintEvent *e)
纯虚函数。