Qt七种信号与槽关联方式
1、F4、 F3、ui界面编辑方式
在UI界面按下F4按键,会进入信号与槽的编辑界面。可看到左侧工具栏全部变为灰色,无法进行部件的选择。左键点击界面中已经添加好的部件,然后进行拖拽即可建立信号与槽的关联。按下F3即可返回原UI编辑界面。
![方法一:F4、F3、UI方式](https://img-blog.csdnimg.cn/20210415164158174.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzA0MDA5MQ==,size_16,color_FFFFFF,t_70)
**2、 ui界面 signal slots Edit方式
该方式较为简单,发送者、接收者、信号与槽,比较直观。
点击编辑界面最下侧的“Signals&Slot Editor”,绿色的“+”可进行创建新的信号与槽的关联,红色的“-”可进行已创建的信号与槽的关联的移除操作。
该方法的好处是各部分的关系都特别的直观,各部分包含有哪些部件,信号是什么,谁是信号的发送者,谁是信号的接收者都一目了然。
**
![方法二:singnals、slots方式。](https://img-blog.csdnimg.cn/20210415164311916.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzA0MDA5MQ==,size_16,color_FFFFFF,t_70)
**3.最常规的用法,QT4下使用,现在不推荐:
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
例:
connect(btn,SIGNAL(clicked()),this,SLOT(myclicked()));
connect(ui->lineEdit,SIGNAL(textEdited(QString)),ui->textBrowser,SLOT(setText(QString)));
该方法使用时,需在头文件中分别声明好SIGNAL和SLOT。函数中,sender和receiver是指向QObject的指针,signal和slot是不带参数的函数名。SIGNAL()宏和SLOT()宏会把他们的参数转换成相应的字符串。
**
![方法三:qt4下使用](https://img-blog.csdnimg.cn/20210415164417207.png)
**4、自动关联方式,button点右键转到槽:
on_pushButton_clicked()
点击进入UI界面,从左侧工具栏拖拽一个Push Button部件进入界面中。右键pushbutton,选择转到槽。选择信号,点击ok。在.Cpp文件中书写相对应的代码即可。
**
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021041516451691.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415164527700.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzA0MDA5MQ==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415164537611.png)
**5、connect()函数基于函数指针的重载形式,QT5下使用:
connect(sender, &Sender::signal, receiver, &Receiver::slot);
例:
connect(btn,&QPushButton::clicked,this,&MainWindow::myclicked);
该方法:
(1)编译器,检查信号与槽是否存在,参数类型检查,Q_OBJECT宏是否存在。
(2)信号可以和普通函数、类的普通成员函数、lambda函数连接(不在局限于信号和槽函数)。
(3)参数可以是typedef的或者使用不同的namespace specifier。
(4)可以允许一些自动类型的转换(即信号和槽函数类型不必完全匹配)。
6、手动提交。emit方式:
**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415164610585.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415164620465.png)
![**在这里插入图片描述**](https://img-blog.csdnimg.cn/202104151646294.png)
**7、lambda,C++11下使用:
该方法使用前,需在.pro文件中先添加“CONFIG += C++11”。
**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415164656991.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415164709456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzA0MDA5MQ==,size_16,color_FFFFFF,t_70)
----求点赞三连~
----2021年4月15日