1、QAbstractButton 属性
QAbstractButton 属性速查表 | |||
属性名 | 说明 | 属性名 | 说明 |
autoExclusive | 自动排他性 | checked | 是否被选中 |
autoRepeat | 是否启用自动重复 | down | 是否处于按下状态 |
autoRepeatDelay | 初始延迟(毫秒) | icon | 按钮上显示的图标 |
autoRepeatInterval | 时间间隔(毫秒 | iconSize | 显示的图标的大小 |
checkable | 是否可选中 | shortcut | 获取和设置快捷键 |
text | 获取和设置显示的文本 |
①、 autoExclusive: bool 访问函数:
bool autoExclusive() const;
void setAutoExclusive(bool);
描述了按钮的自动排他性,若启用了该属性,则属于同一父部件的可选中按钮的行为,
就好像是在同一排他性组中的按钮一样。除了单选按钮,默认为关闭。
②、 autoRepeat: bool 访问函数:
bool autoRepeat () const;
void setAutoRepeat(bool);
描述了按钮是否启用自动重复。当按钮处于按下状态(比如按下按钮不放)时,会以固
定间隔发送 pressed(), released(), clicked()信号。默认为关闭。 经测试,自动重复对
默认按钮无效,也就是按下 enter 键时,即使关闭自动重复,默认按钮仍会重复发送
上述信号。
③、 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&);
保存与按钮关联的助记符, QKeySequence 类型见后文
⑪、 text: QString 访问函数:
QString text() const;
void setText(const QString&);
按钮上显示的文本。若按钮没有文本,则 text()返回一个空字符串。
示例 1:按钮的排他性与自动重复
//m.h 文件的内容
#ifndef M_H
#define M_H
#include<QtWidgets>
#include <iostream>
using namespace std;
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(){ cout<<"F"<<endl; }
};
#endif
//m.cpp 文件的内容
#include "m.h"
int main(int argc, char *argv[]){
QApplication a(argc,argv);//创建部件
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 a.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 animateClick(int m=100);
执行动画单击:即,立即按下按钮,然后在 m 毫秒之后释放。在释放按钮之前再次调
用此函数,会重新设置计时器。所有与单击有关的信号都会根据情况发出。若该按钮
被禁用,则此功能不起作用。
②、 void click()
此槽接收来自与点击相关的常见信号,若按钮是可选中的,则切换该按钮的状态。若
该按钮被禁用,则此槽函数不起作用。
③、 void toggle(); 切换可选中按钮的状态。
示例 2:动画点击与状态切换
//m.h 文件的内容。
#ifndef M_H
#define M_H
#include <QtWidgets>
#include <iostream>
using namespace std;
class B:public QPushButton{
Q_OBJECT
public: B(QString s="",QWidget *p=0):QPushButton(s,p){}
public slots: //注: qt5.0 之后,可使用普通函数作为槽函数。
void f(){ cout<<"F"<<endl; }
void g(){ animateClick(4000); }//执行动画点击,即按下按钮 4 秒之后,按钮才会被弹起
};
#endif
//m.cpp 文件的内容
#include "m.h"
int main(int argc, char *argv[]){
QApplication a(argc,argv);
//创建部件
QWidget w;
B *pb1=new B("AAA",&w);
B *pb11=new B("AAA1",&w);
QCheckBox *pb2=new QCheckBox("BBB",&w);
//布局各部件
pb1->move(22,22); pb11->move(99,22); pb2->move(22,77);
//把各按钮与相应的槽关联。
QObject::connect(pb1,&QPushButton::clicked,pb2,&QCheckBox::toggle);
QObject::connect(pb2,&QCheckBox::toggled,pb1,&B::f);
QObject::connect(pb11,&QPushButton::pressed,pb1,&B::g);
w.resize(300,200);
w.show();
return a.exec();
}
结果: