QT信号、槽机制介绍与实现

时间记录:2023/12/17
1.介绍
    QT中进行对象之间事件的处理机制为信号、槽机制,即一个对象状态改变时发出信号,然后与此信号进行绑定的对应槽便会被触发,类似于c/c++里面的回调函数机制
2.信号
    在一定情况下被发射的事件,QT中,声明信号使用关键字signals,发送信号使用emit,声明信号时不需要使用关键字public/protected/private,同时,信号没有返回值,使用void,信号只需要进行声明而不需要进行定义(实现)。
3.在QT中创建一个c++的类然后实现信号、槽
(1)右键项目名称,点击Add New…
添加新文件
选择add
(2)选择C++文件,C++ Class,然后点击Choose…
创建类
(3)确定类名和基类,选择文件添加位置。
设置类名
(4)确定新建文件要添加进哪个项目中。
添加文件到项目
3.1 头文件中定义信号

signals:
	void newSignals();

4.槽
    信号的响应函数,在槽定义时需要使用public/protected/private关键字修饰,可以带参数,使用slots关键字进行声明,并且需要进行实现,所有函数都可以作为槽函数使用(信号除外)。
4.1 头文件中进行声明

private slots:
	void newSlot();

4.2 源文件中进行实现

void MyTestFile::newSlot()
{
   
	//进行的相应操作
}

5.信号与槽的绑定、发送信号

MyTestFile *test = new MyTestFile();
QObject::connect(test,SIGNAL(newSignal()),test,SLOT(newSlot()));//方式1 SIGNAL和SLOT宏进行绑定
QObject::connect(test,&MyTestFile::newSignal,test,&MyTestFile::newSlot);//方式2 函数地址进行绑定
QObject::connect(test,&MyTestFile::newSignal,[=](){
   
	//槽函数操作
});//方式3 lambda表达式方式

emit newSignal();//发送信号

6.信号和槽的重载
与c++的类方法类似,QT中信号和槽也可以进行重载,即函数名相同,参数类型不同/参数数量不同即为重载,然后根据信号传入的实参调用对应槽
6.1 信号与槽的绑定需要槽的参数小于等于信号的参数
函数指针方式进行绑定

MyTestFile *newF=new MyTestFile;
void (MyTestFile:: *sign)(int)=&MyTestFile::newSignal;//函数指针
void (MyTestFile:: *sl)(int)=&MyTestFile::newSlot;
QObject::connect(newF,sign,newF,sl);//QT5的新方式

相关推荐

  1. 纯Python实现Qt信号机制

    2023-12-18 07:16:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 07:16:03       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 07:16:03       97 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 07:16:03       78 阅读
  4. Python语言-面向对象

    2023-12-18 07:16:03       88 阅读

热门阅读

  1. 【Vue3练习】Vue3使用v-model以及多个v-model

    2023-12-18 07:16:03       55 阅读
  2. vue模板语法

    2023-12-18 07:16:03       63 阅读
  3. 数据结构 | 二叉树的遍历(递归&非递归)

    2023-12-18 07:16:03       56 阅读
  4. 【NeurIPS 2023】多模态联合视频生成大模型CoDi

    2023-12-18 07:16:03       65 阅读
  5. React Hooks解决了什么问题?

    2023-12-18 07:16:03       60 阅读
  6. AutoJs学习-某点阅读自动签到任务脚本

    2023-12-18 07:16:03       49 阅读
  7. Node.js初学习

    2023-12-18 07:16:03       63 阅读
  8. Axure的交互样式和情形

    2023-12-18 07:16:03       59 阅读
  9. tp如何开启监听SQL

    2023-12-18 07:16:03       57 阅读
  10. C语言初学4:运算符

    2023-12-18 07:16:03       63 阅读