按钮控件的基类--- QAbstractButton 类(抽象类)

本文详细解释了Qt中的QAbstractButton类的各种属性,包括自动排他性、自动重复功能、选中状态、快捷键、图标和文本等,并通过实例展示了如何应用这些属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值