文章目录
- QAbstractButton 抽象类(父类)
- QAbstractButton 类中的属性
- QAbstractButton 类中的函数
- QAbstractButton 类中的信号
- QAbstractButton 类中的槽
- QPushButton 类(标准按钮)
- QPushButton 类中的属性
- QPushButton 类中的函数、槽
- QCheckBox 类(复选按钮)
- QCheckBox 类的属性
- QCheckBox 类的函数,信号
- QToolButton 类(工具按钮)
- QToolButton 类中的属性
- QToolButton 类中的函数
QAbstractButton 抽象类(父类)
QAbstractButton 是个抽象类,该类是标准按钮 QPushButton、复选按钮 QCheckBox、单选
按钮 QRadioButton、工具按钮 QToolButton 的父类,该类描述了按钮的一些共同功能,比
如单击按钮发出的信号,按钮的状态等
QAbstractButton 类中的属性
-
autoExclusive:bool
访问函数:bool autoExclusive() const; void setAutoExclusive(bool);
描述了按钮的自动排他性,若启用了该属性,则属于同一父部件的可选中按钮的行为,
就好像是在同一排他性组中的按钮一样。除了单选按钮,默认为关闭。 -
autoRepeat:bool
访问函数:bool autoRepeat () const; void setAutoRepeat(bool);
描述了按钮是否启用自动重复。当按钮处于按下状态(比如按下按钮不放)时,会以固
定间隔发送 pressed(),released(),clicked()信号。默认为关闭。 -
autoRepeatDelay:int
访问函数:int autoRepeatDelay() const; void setAutoRepeatDelay(int);
自动重复的初始延迟(毫秒) -
autoRepeatInterval:int
访问函数:int autoRepeatInterval() const; void setAutoRepeatInterval(int);
自动重复的时间间隔(毫秒) -
checkable:bool
访问函数:bool isCheckable() const; void setCheckable(bool);
按钮是否可选中,默认为可选中 -
checked:bool
访问函数:bool isChecked()const; void setChecked(bool)
按钮是否被选中(即是否处于选中状态),只有可选中按钮才能被选中。默认未被选中。 -
down:bool
访问函数:bool isDown()const;void setDown(bool);
按钮是否被按下(即是否处于按下状态)。若此属性为 true,则按钮被按下。若把此属性
设置为 true,则不会发送 pressed()和 clicked()信号(经测试,仍会发送这些信号)。默认
为 false。 -
icon:QIcon
访问函数:QIcon icon() const; void setIcon(const QIcon &);
按钮上显示的图标, -
iconSize:QSize
访问函数:QSize iconSize() const; void setIconSize(const QSize);
按钮上显示的图标的大小。默认大小由 GUI 样式定义。这是图标的最大大小,较小
的图标不会被放大。 -
shortcut :QKeySequence
访问函数:QKeySequence shortcut() const; void setShortcut(const QKeySequence&);
保存与按钮关联的助记符,快捷键。 -
text:QString
访问函数:QString text()const; void setTex t(const QString&);
按钮上显示的文本。若按钮没有文本,则 text()返回一个空字符串。 -
示例:按钮的排他性与自动重复
class B : public QPushButton
{
Q_OBJECT
public:
B(QString s = "", QWidget *p = 0) : QPushButton(s, p) {}
// 若重写以下事件处理函数,则使用该类创建的按钮,将不会发送 Qt 内置的信号(比如 clicked()等)
// void mousePressEvent(QMouseEvent *e){cout<<"D"<<endl;}
public slots: // 注:qt5.0 之后,可使用普通函数作为槽函数。
void f() { qDebug() << "F"; }
};
int main(int a, char *b[])
{
QApplication c(a, b);
// myWidget w;
// w.show();
QWidget w;
B *pb1 = new B("AAA", &w);
B *pb11 = new B("AAA1", &w);
QCheckBox *pb2 = new QCheckBox("BBB", &w);
QCheckBox *pb3 = new QCheckBox("CCC", &w);
QCheckBox *pb4 = new QCheckBox("DDD", &w);
QRadioButton *pb5 = new QRadioButton("EEE", &w);
QRadioButton *pb6 = new QRadioButton("FFF", &w); // 单选按钮默认具有排他性。
QCheckBox *pb7 = new QCheckBox("GGG", &w);
// 布局各部件
pb1->move(22, 22);
pb11->move(99, 22);
pb2->move(22, 77);
pb3->move(99, 77);
pb4->move(155, 77);
pb5->move(22, 122);
pb6->move(99, 122);
pb7->move(155, 122);
pb1->setAutoRepeat(true); // pb1 开启自动重复
pb1->setAutoRepeatDelay(1000); // 设置初始延迟为 1 秒
pb1->setAutoRepeatInterval(2000); // 设置时间间隔为 2 秒
// 把按钮 pb1 的 clicked 信号与槽 f 关联。
QObject::connect(pb1, &QPushButton::released, pb1, &B::f);
pb2->setAutoExclusive(true);
pb3->setAutoExclusive(true); // 开启按钮的排他性
pb11->setDown(true); // 设置为按下状态
pb7->setCheckable(false); // 设置为不可选中。
w.resize(300, 200);
w.show();
return c.exec();
}
QAbstractButton 类中的函数
QAbstractButton(QWidget *parent=Q_NULLPTR);
//构造函数QButtonGroup* group() const
返回此按钮所属的组,若按钮不是任何 QButtonGroup 的成员,则返回 0。
QAbstractButton 类中的信号
void clicked(bool checked =false)
- 以下情形会发送此信号
- 鼠标点击按钮然后释放时,注意:按钮释放时才会发送。
- 调用 click()或 animateClick()函数时。
- 按下对应的快捷键或空格键时
- 当调用 setDown()、setChecked()或 toggle()函数时,不会发送该信号
- 若按钮是可选中的,当按钮被选中时,参数 checked 为 true,若按钮未被选中,则为 false
- 需要注意的是 QWidget 类并不发送此信号及 pressed 和 released 信号
void pressed();
按下按钮时发送此信号void released();
释放按钮时发送此信号void toggled(bool checked);
- 每当可选中按钮切换状态时,都会发送此信号。若按钮被选中,则参数 checked
为 true,若按钮被取消选中,则为 false。 - 按钮状态的改变可能是由于用户操作,click()槽函数或 setChecked()函数被调用的
结果。 - 在发出信号前,将更新排他性按钮组中按钮的状态
QAbstractButton 类中的槽
void checkStateSet()
当使用 setChecked()时,会调用此虚函数,除非它是在 nextCheckState()中调用的。它
允许子类重置其中间按钮状态。bool hitButton(const QPoint &pos) const;
若 pos 位于可单击按钮的矩形内,则返回 true,否则返回 false。可单击区域默认是整
个部件,子类可重新实现此函数,以提供对不同形状和大小的可单击区域的支持。void nextCheckState()
当按钮被单击时,调用此虚函数,该函数允许子类实现中间按钮状态。void paintEvent(QPaintEvent* e)=0;
这是个纯虚函数,子类必须重新实现该函数。
QPushButton 类(标准按钮)
QPushButton 类中的属性
autoDefault:bool
访问函数:bool autoDefault() const; void setAutoDefault(bool);
若此属性为 true,则此按钮是一个自动默认按钮。若按钮的父部件是 QDialog,则此
属性的默认值为 true,否则为 false。default:bool
访问函数:bool isDefault() const; void setDefault(bool);
此属性描述了是否为默认按钮。默认为 false。flat:bool
访问函数:bool isFlat() const; void setFlat(bool);
此属性描述了是否提高按钮的边框。若此属性为 true,大多数样式不会绘制按钮的背景,
除非按下按钮。也就是说,若该属性为 true,在通常情况下,若不按下按钮,则该按钮
看起来就像一个标签一样,是平的。
QPushButton 类中的函数、槽
QPushButton (QWidget* parent = Q_NULLPTR);
//构造函数
QPushButton (const QString &text , QWidget* parent = Q_NULLPTR)
QPushButton (const QIcon &icon , const QString &text , QWidget* parent = Q_NULLPTR)
QMenu* menu() const;
返回与此按钮相关的弹出菜单,若未设置弹出菜单,则返回 0。菜单详见相关章节void setMenu (QMenu * menu);
将弹出菜单 menu 与按钮关联,这会使按钮成为菜单按钮。void showMenu();
//槽
显示(弹出)与此按钮相关联的弹出菜单,若没有菜单,则什么也不做。在用户关闭弹
出菜单之前,该函数不会返回。
QCheckBox 类(复选按钮)
QCheckBox 类的属性
tristate:bool
访问函数:bool isTristate() const; void setTristate(bool y=true);
该属性保存复选按钮是否为三态按钮,默认为 false。注意:属性的设置函数 setTristate
只能设置此按钮具有三态按钮的形式,但不能使该按钮呈现出第三种状态,即按钮前
面的小方框内不会有小黑方框的填充,但点击该按钮,会在三种状态间变换。设置按
钮的状态应使用下面介绍的成员函数 setCheckState()。
QCheckBox 类的函数,信号
QCheckBox(QWidget* parent = Q_NULLPTR);
//构造函数
QCheckBox(const QString &text , QWidget* parent = Q_NULLPTR);
Qt::CheckState checkState() const;
//返回复选框的选中状态。void setCheckState(Qt::CheckState state);
设置复选按钮的状态为 state ,该函数可设置复选按钮的三种状态,
QAbstractButton::setChecked()只能设置两种状态。
Qt::CheckState 枚举(无标志)
枚举成员 | 值 | 说明 |
---|---|---|
Qt::Unchecked | 0 | 未选中 |
Qt::PartiallyChecked | 1 | 部分被选中,项目中的子项目被选中(非全部),则项目就是部分状态 |
Qt::Checked | 2 | 选中 |
void stateChanged(int state);
//信号
当复选按钮的状态发生变化时发送该信号。若复选按钮具有三态形式,则按钮会在“选
中、未选中、部分选中”三种状态间变化,只要这三种状态变化都会发送该信号,但
QAbstractButton::toggled()信号在三种状态间变化时,则不一定会发送。
QToolButton 类(工具按钮)
QToolButton 类中的属性
arrowType:Qt::ArrowType
访问函数:Qt::ArrowType arrowType() const;void setArrowType(Qt::ArrowType type);
此属性描述了是否显示一个箭头作为工具按钮的图标,默认为 Qt::NoArrow
autoRaise:bool
访问函数:bool autoRaise() const; void setAutoRaise(bool enable);
此属性描述了是否启用自动提升,默认为禁用(即为 false)。
popupMode:ToolButtonPopupMode
访问函数:ToolButtonPopupMode popupMode() const;
void setPopupMode(ToolButtonPopupMode mode);
此属性描述了弹出菜单的使用方式,默认为 QToolButton::DelayedPopup
枚举成员 | 值 | 说明 |
---|---|---|
QToolButton::DelayedPopup | 0 | 按住工具按钮一段时间后显示菜单超时时间取决于样式 |
QToolButton::MenuButtonPopup | 1 | 显示一个特殊的箭头,表示该工具按钮存在菜单,按下箭头时,会显示菜单 |
QToolButton::InstantPopup | 2 | 按下工具按钮时,立即显示菜单。在此模式下,按钮本身的 action 不会被触发 |
toolButtonStyle:Qt::ToolButtonStyle
访问函数:Qt::ToolButtonStyle toolButtonStyle() const;
void setToolButtonStyle(Qt::ToolButtonStyle style); //槽
此属性描述了工具按钮图标和文本的显示方式,即仅显示文本、图标、还是图标和文本一起显示。 默认为 Qt::ToolButtonIconOnly (即仅显示图标)
QToolButton会自动把setToolButtonStyle()槽函数连接到QMainWindow中的相关信号。
QToolButton 类中的函数
QToolButton(QWidget* parent = Q_NULLPTR);
构造函数,需要注意的是,不能通过构造函数为工具按钮设置文本和图标。
QAction* defaultAction() const;
//返回默认 QAction
QMenu* menu() const;
//返回与此按钮关联的菜单,若没有菜单则返回 0。
void setDefaultAction(QAction* action)
//槽
设置默认动作(action)为 action,若该按钮具有默认动作,则 action 定义按钮的属性,比如文本、图标等。
void setMenu(QMenu* menu);
设置与该按钮相关联的菜单,菜单的所有权不会传递到该按钮。
void showMenu()
//槽
显示(弹出)与此按钮相关联的弹出式菜单,若没有这样的菜单,则什么也不做,在用户关闭该菜单之前,此函数不会返回。
void triggered(QAction * action)
//信号
当触发给定的动作 action 时,发送此信号。该操作还可以与用户界面的其他部分相关联,比如菜单项、键盘快捷键等,以这种方式共享动作,可使用户界面操作更一致。