QT第二天(信号与槽)

22 篇文章 2 订阅
7 篇文章 0 订阅

目录

信号与槽是QT 的核心机制!几乎所有的任务都是使用信号与槽去处理的!

一、信号与槽的关联

二、关联流程

1、在构造函数中调用connect关联

2、在头文件声明槽函数

3、槽函数实现

4、信号的发送

三、信号与槽的传递

 信号与槽的参数可以在任意对象间传递

四、信号与槽的互相关联

1、信号的关联

2、信号与槽取消关联

五、lambda与信号与槽

六、QButtonGroup 按钮组

1、signals信号

2、函数接口

总结:

下一章是做一个计算器


信号与槽是QT 的核心机制!几乎所有的任务都是使用信号与槽去处理的!

一、信号与槽的关联

QT4语法:

connect(信号发送者,SIGNAL(信号),信号接收者(主窗口是this),SLOT(槽函数));

QT5语法:

connect(信号发送者,&发送者类名::信号名,信号接收者,&接收者类名::槽函数);

注意:槽函数和信号在哪定义的谁就是接收者或发送者。

二、关联流程

1、在构造函数中调用connect关联

//QT5:
关联按钮的信号与槽
ui->setupUi(this);
connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::button_fun);

2、在头文件声明槽函数

 Q_OBJECT    //对象
signals:    自定义信号,只需声明即可
    void sig_f();
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    自定义槽函数,格式
public slots:
    void button_fun();

3、槽函数实现

鼠标点击器,点击10次就不能点击
int i=0;
void MainWindow::button_fun(){
    if(i==9)
      ui->pushButton->setEnabled(false);  设置按钮为不可点击状态,ture为可点击状态,false为不可点击
//    ui->pushButton->setDisabled(true); //这个也可以
    ui->label->setNum(++i);    定义一个标签,显示数值
}

4、信号的发送

emit  信号名(); 
自定义发送一个信号 
emit mysig();  可以传参,信号发送在connect关联的时候就发送了

三、信号与槽的传递

 信号与槽的参数可以在任意对象间传递

1.信号与槽的参数列表必须匹配。

2.信号的参数个数必须大于或等于槽函数的参数个数。//默认取第一个参数

四、信号与槽的互相关联

1、

2、信号与槽取消关联

在connect前面加dis前缀就行。 例如:

disconnect((ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()))

五、lambda与信号与槽

简化了槽函数,只需在lambda内部编写小代码就行

 关联按钮的信号与槽,lambda格式
      connect(ui->pushButton,&QPushButton::clicked,this,
              [=](){
             ui->label->setText("点击了按钮lambda ");
      });

六、QButtonGroup 按钮组

1、signals信号

void buttonClicked(QAbstractButton *button) //直接传递按钮的地址 
void buttonClicked(int id) //传递按钮的ID 

2、函数接口

往按钮组中添加按钮
void addButton(QAbstractButton *button, int id = -1) //id为-1默认系统分配id
button:需要添加的按钮 
   id:给该按钮一个ID (编号)

 对象管理树
    this->dumpObjectTree();    可以看到对象里面包含了哪些对象,QT是有内存回收机制的
    
    关联对象按钮,buttonClicked()是内部函数!用于发送id信号。
    connect(bg,SIGNAL(buttonClicked(int)),this,SLOT(Calculate(int)));   //储存数字

总结:

1、信号与槽的关联通过connect函数关联。

2、QT4和QT5格式不一样,定义的槽函数不能切换,只能选一种格式。

3、QT里面处处是对象,层层递进,因此需要经常查手册。

下一章是做一个计算器(挺麻烦的,思考了很久)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值