按钮基类 QAbstractButton
在QT中为我们提供了可以直接使用的按钮控件, 如下图。这些按钮种类虽然繁多, 但是它们都拥有相同的父类
QAbstractButton
。这些子类按钮的大部分属性都是从这个基类继承的,因此搞明白这个类为我们提供的相关功能还是非常重要的。 其中Dialog Button Box
比较特殊不是一个单一控件, 它是两个QPushButton的组合并且水平排列,这个不能作为一个新控件来研究。
这些按钮控件之间的继承关系如下图:
介绍一下QAbstractButton
中的一些常用API
1. 标题和图标
// 参数text的内容显示到按钮上 void QAbstractButton::setText(const QString &text); // 得到按钮上显示的文本内容, 函数的返回就是 QString QAbstractButton::text() const; // 得到按钮设置的图标 QIcon icon() const; // 给按钮设置图标 void setIcon(const QIcon &icon); // 得到按钮图标大小 QSize iconSize() const // 设置按钮图标的大小 [slot]void setIconSize(const QSize &size);
2. 按钮的 Check 属性
对应按钮来说, 一般有三种常见状态, 分别为:
Normal
,Hover
,Pressed
。
Normal
: 普通状态, 没有和鼠标做任何接触
Hover
: 悬停状态, 鼠标位于按钮之上, 但是并未按下
Pressed
: 按压状态,鼠标键在按钮上处于按下状态默认情况下, 鼠标在按钮上按下, 按钮从
Normal
切换到Pressed
状态, 鼠标释放, 按钮Pressed
恢复到Normal
状态。 当我们给按钮设置了check
属性之后,情况就有所不同了, 在按钮上释放鼠标键, 按钮依然会处在Pressed
状态, 再次点击按钮, 按钮才能恢复到Normal
状态。具有check
属性的按钮就相当于一个开关,每点击一次才能实现一次状态的切换。
// 判断按钮是否设置了checkable属性, 如果设置了点击按钮, 按钮一直处于选中状态 // 默认这个属性是关闭的, not checkable bool QAbstractButton::isCheckable() const; // 设置按钮的checkable属性 // 参数为true: 点击按钮, 按钮被选中, 松开鼠标, 按钮不弹起 // 参数为false: 点击按钮, 按钮被选中, 松开鼠标, 按钮弹起 void QAbstractButton::setCheckable(bool); // 判断按钮是不是被按下的选中状态 bool QAbstractButton::isChecked() const; // 设置按钮的选中状态: true-选中, false-没选中 // 设置该属性前, 必须先进行 checkable属性的设置 void QAbstractButton::setChecked(bool);
3. 信号
这些信号都按钮被点击之后发射出来的, 只是在细节上有细微的区别, 其中最常用的是
clicked()
通过鼠标的不同瞬间状态可以发射出pressed()
和released()
信号, 如果鼠标设置了check
属性, 一般通过toggled()
信号判断当前按钮是选中状态还是非选中状态。
/* 当按钮被激活时(即,当鼠标光标在按钮内时按下然后释放),当键入快捷键时,或者当click()或animateClick()被调用时,这个信号被发出。值得注意的是,如果调用setDown()、setChecked()或toggle(),则不会触发此信号。 */ [signal] void QAbstractButton::clicked(bool checked = false); // 在按下按钮的时候发射这个信号 [signal] void QAbstractButton::pressed(); // 在释放这个按钮的时候发射直观信号 [signal] void QAbstractButton::released(); // 每当可检查按钮改变其状态时,就会发出此信号。checked在选中按钮时为true,在未选中按钮时为false。 [signal] void QAbstractButton::toggled(bool checked);
4. 槽函数
// 执行一个动画点击:按钮被立即按下,并在毫秒后释放(默认是100毫秒)。 [slot] void QAbstractButton::animateClick(int msec = 100); // 执行一次按钮点击, 相当于使用鼠标点击了按钮 [slot] void QAbstractButton::click(); // 参考 1.2 中的函数介绍 [slot] void QAbstractButton::setChecked(bool); // 设置按钮上图标大小 [slot]void setIconSize(const QSize &size); // 切换可检查按钮的状态。 checked <==> unchecked [slot] void QAbstractButton::toggle();
了解了基类提供的功能之后, 下边着重给大家介绍一下按钮组中常用的几这个按钮控件: QPushButton
, QToolButton
, QRadioButton
, QCheckBox
。