QAbstractButton使用总结
- 一、概要
- 1.显示内容
- 2. 快捷键
- 3. 对话框默认按钮
- 4. 按钮状态
- 5. 信号说明
- 6. 自定义按钮
QAbstractButton 类实现的是一个抽象按钮。主要是Button类具有的共性,但是处理用户的操作响应、并绘制不同按钮的形式是由子类来完成的。
一、概要
QAbstractButton 同时支持 Push 按钮和 checkable(toggle)按钮。
- Checkable(toggle)按钮在QRadioButton 和 QCheckBox类中实现。
- Push 按钮在 QPushButton 和 QToolButton 类中实现;如果需要。
1.显示内容
任何继承了 QAbstractButton 的按钮类 都可以显示包含文本和图标的标签。如果按钮被禁用,则其标签将更改,以使按钮具有“禁用”外观。
- setText() 设置文本;
- setIcon() 设置图标;
也就是说 Qt 框架提供的 QPushButton, QToolButton, QCheckBox 和 QRadioButton 都可以展示 icon 图标 和 text文字
2. 快捷键
如果按钮是带有包含与号 (‘&’) 的字符串的文本按钮,则 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"));
3. 对话框默认按钮
在一个对话框窗口上,可以设置按钮为默认按钮,使用的就是下面两个函数
QPushButton::setDefault() 和 QPushButton::setAutoDefault()
默认其实就是像这种 Save 被选中 ,默认是有焦点的
- QPushButton::setAutoDefault()
此属性保存按钮是否为自动默认按钮
如果此属性设置为 true,则按钮是自动默认按钮。
在某些 GUI 样式中,默认按钮周围会绘制一个额外的框架,最多 3 个像素或更多。Qt会自动在自动默认按钮周围保持此空间,即自动默认按钮可能具有稍大的提示。这个可以用 QSS美化设置
QPushButton:default{ /* 样式代码 */ }
此属性的默认值对于具有 QDialog 父级的按钮为 true;否则默认为 false。 - QPushButton::setDefault()
此属性保存按钮是否为默认按钮
默认按钮和自动默认按钮决定当用户在对话框中按 Enter 时会发生什么情况。
当用户按 Enter 时,将自动按下此属性设置为 true 的按钮(即对话框的默认按钮),但有一个例外:如果 autoDefault 按钮当前具有焦点,则按下 autoDefault 按钮。当对话框具有自动默认按钮但没有默认按钮时,按 Enter 将按当前具有焦点的自动默认按钮,如果没有按钮具有焦点,则按焦点链中的下一个自动默认按钮。
在对话框中,一次只能有一个按钮是默认按钮。
默认按钮行为仅在对话框中提供。当按钮具有焦点时,始终可以通过按空格键从键盘单击按钮。如果在对话框可见时当前默认按钮的默认属性设置为 false,则下次对话框中的按钮获得焦点时,将自动分配新的默认值。
此属性的默认值为 false。
4. 按钮状态
QAbstractButton 提供了用于按钮的大多数状态:常用的如下
状态名 | 含义 |
---|---|
isDown() | 表明按钮是否是 press 状态 |
isChecked() | 表明按钮是否是 checked 状态,只有 checkabel 按钮具有 checked 或 unchecked 状态 |
isEnabled() | 表明按钮是否是 可以被 press 按下状态, 派生自 QAbstractButton 的按钮在接受鼠标和上下文菜单事件 是disabled的 |
setCheckable() | 表明按钮是否是 可以 toggle |
setAutoRepeat() | 设置按钮被快速按下时,是否重复接收按钮信号,其实就是说我可以设置在一定时间间隔内的点击鼠标是无效的,避免高频点击按钮出问题 |
5. 信号说明
QAbstractButton 提供了4种信号
信号名 | 含义 |
---|---|
pressed() | 在鼠标左键在按钮内部按下时触发 |
released() | 在鼠标左键在按钮内部释放时触发 |
clicked() | 在鼠标第一次按钮后并释放的时候,或者键盘快捷键按下时,或者 软件上这个 emit click 或者 emit animateClick() |
toggled() | 当这个 toggle button 状态改变时,其实就是 checked 或 unchecked 的时候都会触发 |
6. 自定义按钮
要对 QAbstractButton 进行继承,您必须至少重新实现 paintEvent() 来绘制按钮的轮廓及其文本或像素图。通常建议重新实现 sizeHint(),有时还可以按 hitButton()(以确定按钮按下是否在按钮内)。对于具有两种以上状态的按钮(如三态按钮),您还必须重新实现 checkStateSet() 和 nextCheckState()。
后面我实现一下三态按钮。