QT之信号与槽机制方式

                                           QT之信号与槽机制方式

       QT提供了信号与槽机制用于完成界面操作的响应,是完成任意两个QT对象之间的通信方式,信号与槽进行关联,信号在某一个特定的情况和动作下触发,槽是等同于接收和处理信号的函数。因此可以把信号看做发射端,槽看做接收端。当一个类被继承时,其该类的信号和槽也同时会继承。

     信号与槽机制的连接方式:

    1、一个信号可以与另一信号进行连接,触发一个信号,将会一级一级的触发下一级信号,知道触发到槽为止。

       connect(this,SIGNAL(signal1()),this,SIGNAL(signal0()));  

   2、一个信号可以与多个槽进行连接。

       connect(this,SIGNAL(signal1()),this,SIGNAL(slot0()));  

       connect(this,SIGNAL(signal1()),this,SIGNAL(slot1()));  

  3、同一个槽可以接收多个信号。

      connect(this,SIGNAL(signal0()),this,SIGNAL(slot0()));  

      connect(this,SIGNAL(signal1()),this,SIGNAL(slot0()));  

测试例子:

     1、建立一个工程,在UI里布局几个按键当做信号,一个TEXT显示端口。

 

   2、实现代码:通过按键发送消息,在按键处理函数里,调用信号发送,初始化关联各个槽接口。

 

        

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this,SIGNAL(sendsignal0()),this,SLOT(testSlot0()));
    connect(this,SIGNAL(sendsignal0()),this,SLOT(testSlot1()));

    connect(this,SIGNAL(sendsignal1()),this,SIGNAL(sendsignal0()));

    connect(this,&MainWindow::sendsignal2,this,&MainWindow::testSlot2);
    connect(this,&MainWindow::sendsignal3,this,&MainWindow::testSlot2);
}
void MainWindow::testSlot0()
{
Cnt0++;
QString str="接收到一个信号:"+QString::number(Cnt0)+" "+QString::number(Cnt1);
ui->lineEdit->setText(str);
}
void MainWindow::testSlot1()
{
    Cnt1++;
    QString str="接收到一个信号:"+QString::number(Cnt0)+" "+QString::number(Cnt1);
 ui->lineEdit->setText(str);
}

void MainWindow::testSlot2()
{
    Cnt2++;
    QString str="接收到数据:"+QString::number(Cnt2) ;
   ui->lineEdit->setText(str);
}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    emit sendsignal0();

}

void MainWindow::on_pushButton_2_clicked()
{
   emit sendsignal1();
}

void MainWindow::on_pushButton_3_clicked()
{
      emit sendsignal2();
}

void MainWindow::on_pushButton_4_clicked()
{
      emit sendsignal3();
}

注:connect 函数上面有两种写法都是可以的。

    connect(this,SIGNAL(sendsignal1()),this,SIGNAL(sendsignal0()));

    connect(this,&MainWindow::sendsignal2,this,&MainWindow::testSlot2);

   

3、测试效果:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值