qt信号和槽

QT中的八种信号与槽链接方式

1、ui中f3与f4进行槽和信号的关联

这种用法一般是在ui设计界面中使用,在ui界面中利用f3进入信号和槽关联模式,右键选中信号源向外拖动便可以连接到槽,若槽是本界面可以随意拖动到空白处,然后f4退出信号和槽关联模式,再函数定义。边框变红且左边无法使用即是编辑信号与槽模式。
在这里插入图片描述

2、ui中使用下方signals&slots editor

ui界面下方框的signals&slots editor,进行信号和槽的关联,可以直接选信号和槽的列表比较实用,选中的必须是已经存在的信号和槽进行链接,如下图。
在这里插入图片描述

3、常规qt4下的用法,,利用connect进行关联

最常规的方法通过connect方法进行信号和槽的关联,对于connect,其纠错能力太差,所以不推荐使用,在connect下对于信号和槽的设置比较简洁,这种方法对于connect内部信号或者是槽函数的纠错能力较差。如下图比较简单的使用方法:

connect(btn,SIGNAL(clicked()),this,SLOT(cliked()))

4、自动关联利用ui中的自动关联

在ui中设置槽后然后右键转到槽中进行对于槽函数的定义。
在这里插入图片描述

5、利用connect的函数指针的重载形式,(推荐)

利用connect函数进行重载,对于connect函数的重载与connect函数相比减少了对于signal和slot的函数的错误性,增强了纠错能力比较推荐,对于重载函数可以比较直观的看出错误所在,信号和槽的函数比较直观的反映了其作用域以及他的函数名称,当函数名称错误时会报错,所以其纠错能力还可以,比较推荐。

connect(btn,&QPushButton::clicked,this,&MainWindow::cliked);

6、手动提交利用emit方式

emit函数下的信号和槽,对于emit函数就是一个信号,利用这个函数可以对于一个信号触发多个槽函数,只需要将emit嵌套于其他槽函数中,调用槽函数的同时也会调用emit,而emit所对应的信号也会触发相应的槽,即达成了一个信号触发多个槽,emit相当于内置信号。用emit要先声明:

signals:
    void mysignal();
    void signalw();
    

然后再利用在函数中直接用emit mysignal()即可。对于其connect函数如下图

connect(this,SIGNAL(mysignal()),this,SLOT(mycliked()));

7、lamba函数,c++11使用

lamba函数是c++11新型函数,这种函数的优点是不用去单独定义槽函数,他的函数体是capturemutable ->return-type{statement},caputure是捕获你下边函数体中享用的函数,parameters是你的参数,mutable是修饰符,return后边是返回类型{}之后便是函数体,对于这个函数在connect中使用,connect(信号,槽),只需前边的信号,后边的槽可以用lamba函数替换,有效的减小了函数内容,对于这个函数也是比较方便使用,只是对于函数体比较新颖也比较难记。

```cpp
connect(btn,&QPushButton::clicked,[btn]

```cpp
()>return类型{函数体}
  {if(btn->text()=="lamda")
          btn->setText("QST")

8、多个信号对应一个槽

多个信号对应一个槽与一个信号可以触发多个槽类似,定义多个信号connect连接同一个槽即可。

connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(myclide()));
    connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(myclide()));
        connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(myclide()));
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值