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

发布时间:2023年12月17日

时间记录: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的新方式
文章来源:https://blog.csdn.net/m0_49156395/article/details/135050306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。