欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > QT的信号与槽

QT的信号与槽

2025/9/27 17:34:17 来源:https://blog.csdn.net/qq_51457391/article/details/146064413  浏览:    关键词:QT的信号与槽

        从本文开始,将由简到深的开展QT开发的知识。如有错误之处,望大家批评指正,如果觉得写的不错,希望点赞支持,你们的点赞是我创作的动力。谢谢大家!

一、基本概念

信号(Signal)

  • 定义:信号是对象状态变化或事件发生时发出的通知,例如按钮点击(clicked())或数据更新(dataChanged())。信号只需声明,无需实现,由 Qt 的元对象系统(Meta-Object System)自动生成代码

槽(Slot)

  • 定义:槽是响应信号的函数,可以是普通成员函数或专门声明为槽的函数(通过 slots 关键字修饰)。

二、信号与槽的连接方式

        整个信号与槽的过程就是connect(连接),将发起对象和接收对象的连接。动作也可以拆解为发起者、发起者的动作、接收者、接收者的动作。
        首先分别创建信号与槽:

signals:void send(const QString str);private slots:void receive(const QString str);void MainWindow::receive(const QString str)
{qDebug()<<str;
}

        下一步是进行连接,采用connect。即发起对象this,发起对象的动作&MainWindow::send。
接收者this,接收者对象的动作&MainWindow::receive

connect(this,&MainWindow::send,this,&MainWindow::receive);

        调用的方法:

emit send("Hello World");

三、连接类型

        最后叙述一个信号与槽的连接类型,一般是参数5这个位置

connect(参数1,参数2,参数3,参数4,参数5);

类型一般分为默认行为

Qt::DirectConnection
Qt::QueuedConnection

默认情况下,参数5不进行填写,系统会判定为Qt::AutoConnection 根据线程关系自动选择 Direct 或 Queued 。

  1. 同线程场景

    • 若信号发送者和槽接收者属于同一线程(例如都在主线程),Qt::AutoConnection 会自动退化为 Qt::DirectConnection
    • 表现:信号发出后,槽函数立即同步执行emit 语句后的代码需等待槽函数完成后才能继续执行 。
  2. 跨线程场景

    • 若信号发送者和槽接收者属于不同线程(例如子线程信号触发主线程槽),Qt::AutoConnection 会自动退化为 Qt::QueuedConnection
    • 表现:信号发出后,槽函数被加入接收线程的事件队列,由接收线程的事件循环异步处理,emit 语句后的代码立即执行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词