Qt——信号和槽

信号和槽用于对象间的通讯。信号/槽机制是Qt的一个核心特征,也许是Qt与其它框架提供的特性中最不相同的部分。


简介
在GUI编程中,当我们改变一个部件时,经常想要其他部件被通知。更一般化,我们希望任何一类的对象可以和其它对象进行通讯。例如,如果我们点击一个关闭按钮,我们可能想要窗口的close()函数被调用。

其他工具包通过回调实现了这种通信。回调是一个函数指针,所以如果你希望一个处理函数通知你一些事件,你可以把另一个函数(回调)的指针传递给处理函数。处理函数在适当的时候调用回调。尽管一些成功的框架使用了这个方法,但是回调可能是不直观的,并可能在确保回调参数类型正确性上存在问题。


首先,我们先举个生活中的例子:
人按按钮,电灯打开,照明
在Qt中,我们在窗口中设置了一个按钮(button),然后预期得到一个反馈(比如点击按钮后窗口被关闭了)。

对于以上两件事,在Qt中就是用了信号槽机制来完成的。

引入函数——connect(信号的发送者,发送到具体信号,信号的接收者,信号的处理(槽函数))

信号槽的特点:松散耦合,信号发送端和接收端本身无关联,通过connect()将两端耦合到一起。

代码示例:
首先我们创建一个按钮:

	 //创建按钮
    QPushButton *btn=new QPushButton;
	btn->setParent(this);
    btn->setGeometry(100,100,90,30);//设置按钮的坐标和大小
    btn->setText("点我点我");//设置按钮里的字符

连接函数connect()的使用:

	//点击按钮,关闭窗口
    connect(btn,&QPushButton::clicked,this,&QMainWindow::close);

接下来,我们将介绍自定义的信号和槽,并自定义触发条件

首先介绍一下这个信号槽的作用:
下课了->老师饿了->学生请老师吃饭

先创造两个类,老师,学生:

点击查看代码
class Teacher : public QMainWindow
{
    Q_OBJECT
public:
    explicit Teacher(QWidget *parent = nullptr);

signals:
    //自定义信号写到signal下
    //返回值是void,只需要声明,不需要实现
    //可以有参数,可以重载
    void hungry();


};
点击查看代码
class Student : public QMainWindow
{
    Q_OBJECT
public:
    explicit Student(QWidget *parent = nullptr);

signals:

public slots:
    //早期Qt版本,槽函数必须写在public slots下,高级的可以写在public或者全局下
    //返回值为void,需要声明,也需要实现
    //可以有参数,可以发生重载
    void treat();

};

再定义一个treat()函数

void Student::treat(){
    qDebug()<<"请老师吃饭";
}

和一个classisover()函数:

void MainWindow::classisover()
{
    //下课函数,触发老师饿了的信号
    emit zt->hungry();
}

创建一个老师和学生的对象

	//创建一个老师对象和一个学生对象
    this->zt=new Teacher(this);
    this->st=new Student(this);

具体的connect()函数:

	//老师饿了,学生请客
    connect(zt,&Teacher::hungry,st,&Student::treat);
    //调用classisover函数
    classisover();

以上,是我对Qt中信号和槽的一点理解


本文完

作者:Sky6634

出处:https://www.cnblogs.com/Sky6634/p/16471854.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Sky6634  阅读(56)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题