Qt中的 connect 函数

2023-11-03

1、connect()函数实现的是信号与槽的关联。

注意:只有QO bject类及其派生的类才能使用信号和槽的机制

2、函数原型

static QMetaObject::Connection connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,const QObject *receiver, const QMetaMethod &method,
Qt::ConnectionType type = Qt::AutoConnection);

inline QMetaObject::Connection connect(const QObject *sender, const char *signal,const char *member, Qt::ConnectionType type = Qt::AutoConnection) const;

在第一个函数中:第一个参数为发射信号的对象,例如后面的dlg;第二个参数是要发射的信号,例如后面的SIGNAL(dlgReturn(int));

第三个参数是接受信号的对象,例如后面的this,表明是本部件,即Widget,当这个参数是this时,可以将其省略掉,因为在第三个函数中,该参数默认为this;第四个参数是要执行的槽,例如
后面的SLOT(showValue(int)),也可以指定一个信号,实现信号与信号的关联。

eg:

MyDialog *dlg=new MyDialog(this);//将对话框中的自定义信号与主界面中的自定义槽进行关联
connect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
dlg->show();

注意:

1、对于信号与槽,必须使用SIGNAL()和SLOT()宏,它们将参数转化为const char *类型

2、第四个参数指定的槽声明时必须使用slots关键字。

eg:

private slots://槽的声明
void showValue(int value);
void on_label_linkActivated(const QString &link);

Qt中的connect信号和槽不在同一个线程

主线程中发出一个信号,另一个线程槽函数没有响应,这个问题搞了好几个小时,才发现原来是connect时候的第5个参数写错了,在这里做下备注吧。

connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。

Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。

Qt::DirectConnection:槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。

Qt::QueuedConnection:槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。

Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。

Qt::UniqueConnection:这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中的 connect 函数 的相关文章

  • Qt 安装程序框架 - 如何在卸载时仅删除某些文件和文件夹

    我使用 Qt 安装程序框架 如何确保在卸载时仅删除某些文件或文件夹 而不是像当前那样删除安装文件夹中的所有文件 先感谢您 您可以覆盖默认行为component createOperations对于卸载程序 然后使用手动指定每个卸载路径com
  • 为什么 QGraphicsWidget 的选择边框在 QGraphicsScene 中不可见?

    我已经通过一个小部件添加到图形场景 QGraphicSscene QGraphicsProxyWidget 问题是 当我选择该项目时 它被选中 但选择边框不可见 这是代码 QDial dial new QDial Widget dial g
  • 如何访问Loader的sourceComponent中的QML对象?

    我可能需要读取或写入的一些属性Loader s sourceComponent来自一些外部函数 访问该房产的方式是什么x里面的对象的Loader s sourceComponent import QtQuick 2 0 Item width
  • 在 Qthread 中运行函数 - 应用程序将挂起

    我在 QT 内部线程方面遇到一些问题 include
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • QWebSocketServer - 不释放内存

    首先 我在安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题 在 Qt Memcheck 中我必须检查 外部错误 看到它 一些字节是肯定输了 指着我的main就在我的地方QCoreApplication ex
  • 如何将枚举类传递给 QML?

    我正在学习QML with Qt并在通过时遇到一些麻烦enum class to qml 当我使用信号时int参数 一切正常 代码运行完美 But 麻烦就在这里 如果我使用信号与一些enum class我有参数undefinedqml 信号
  • wkhtmltopdf 修补了 qt 吗?

    我正在尝试将多个 URL 转换为 PDF 但是 当我编译 wkhtmltopdf 或运行时apt get install wkhtmltopdf并尝试一下 它说 错误 此版本的 wkhtmltopdf 是针对未修补的 QT 版本构建的 并且
  • QChart 对大数据集无响应

    我的这段代码适用于高达 1000 的数据大小 现在我用 65536 个点对其进行了测试 series new QLineSeries QList
  • QML改变图像颜色

    我搜索了如何对图像进行着色 格式为 svg 或 png 我尝试用一 个填充图像的矩形覆盖我的图像 但由于我的图像不是矩形 它会给整个矩形着色 而不仅仅是图像 可以用qml改变图像颜色吗 或者 是否可以使用 QPixmap 更改 qt 使用
  • Qt 编译器标志顺序

    我的目标是消除某些类型的编译器警告 我发现可以通过在 pro 文件中添加编译器标志来做到这一点 QMAKE CXXFLAGS Wno unused variable Wno reorder 问题是它们被添加在 Qt 构建系统生成的标志之前
  • PyQt 和 QSignalMapper/lambdas - 多个信号,单槽

    我在 PyQt 的菜单上有一个操作列表 每个操作对应我想要显示的每个不同的提要 所以我有一个 Y 将活动源设置为 Y Z 将其设置为 Z 等等 对于网络漫画阅读程序 我的菜单上都有 并且觉得自动化方法可能更好 而不是每次都打字 类似于将其添
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 在信号/槽处理期间删除 QObject

    我知道从槽处理中删除 QObject 可能会使应用程序崩溃 因为它可能有其他排队的事件 因此 我将使用 obj gt deleteLater 而不是使用 delete obj 据我所知 obj 等待处理所有排队的事件 然后 删除 obj Q
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • 我如何告诉 QTableWidget 结束编辑单元格?

    我正在显示一个弹出菜单来选择 QTableWidget 中的某些值 最下面的项目是 修改列表 条目 当我选择它时 应自动出现一个新窗口 并且 QComboBox 应消失 并且单元格返回到 Qt DisplayRole 状态 现在 Qt 拥有
  • 更改 Qt 中的语言环境

    我尝试使用 QLocale 和 setDefault 函数更改区域设置 但似乎不起作用 以下是使用 C 本地化库和 QLocale 更改语言环境的示例 对于 C 本地化库 它似乎可以工作 但对于 QLocale setDefault 函数调
  • Qt QML MenuItem iconSource不显示

    我有一个非常简单的设置只是为了说明问题 import QtQuick Controls 1 4 import QtQuick Window 2 2 ApplicationWindow visible true width 640 heigh

随机推荐

  • HMC管理IBM小机

    IBM P5小机的HMC1和HMC2的IP地址默认为192 168 2 147和192 168 3 147 如果对此默认IP做过改动 后来又遗忘的情况下 通过进入P5小机液晶控制面板上的功能30 就能读出HMC端口的IP地址 具体步骤如下
  • WSI图像分割

    0 介绍 Whole Slide Image WSI 图像非常的大 处理起来比较麻烦 在深度学习中的病理切片图像大多数在 10万x10万分辨率 用平常的图像处理库没有办法读取 openslide 提供了一个很好的接口 这里介绍一个可用于处理
  • void*强制类型转换的应用(自己看吧)

    int main int num 20 void value NULL value num printf d n int value return 0 int test void p return int p int main int nu
  • Java—面向对象设计—类和对象

    理解面向对象程序设计 面向对象程序 Object oriented programming OOP 设计是继面向过程又一具有里程碑意义的编程思想 是现实世界模型的自然延伸 下面从结构化程序设计说起 逐步展示面向对象程序设计 结构化程序设计简
  • 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 kevinxiaoyu 高级研究员 隶属腾讯TEG 架构平台部 主要研究方向为深度学习异构计算与硬件加速 FPGA云 高速视觉感知等方向的构架设计和优化 深度学习的异构加速技术
  • RabbitMQ之延迟队列

    RabbitMQ之延迟队列 1 延迟队列概念 2 延迟队列使用场景 3 RabbitMQ 中的 TTL 3 1 消息设置 TTL 3 2 队列设置 TTL 3 3 两者的区别 4 整合 SpringBoot 4 1 创建项目 4 2 添加依
  • 深入解析C/C++的优缺点以及就业方向

    众所周知C C Java Python都是主流的后端开发语言 并且不同的语言 具备不同的优缺点以及就业方向 解析来小编带你一起看看C C 的优缺点以及就业方向 深入解析C C 的优缺点以及就业方向 C语言是很多语言的鼻祖 所以学会C语言 非
  • Welcome to Level 3 (不容易啊...记下啦^_@)

    Welcome to Level 3 Hey clin003 Congratulations Don t forget to check your Mod X ranking and access the level 3 forum to
  • 结合入栈出栈浅谈前序遍历,中序遍历,后序遍历

    二叉树深度遍历 讨巧应付面试 以前其实也懂什么叫二叉树的前中后序遍历 反正面试的时候 给我一个二叉树 我是知道怎么写出他们的答案的 例如如下二叉树 前序遍历 A B D E C F G 中序遍历 D B E A F C G 后序遍历 D E
  • Infinite Fraction Path【HDU-6223】【BFS+剪枝】

    题目链接 训练赛的时候 想到的做法是倍增维护 因为每个点的后继是唯一的 然后又因为不会桶排 所以的复杂度是一定会TLE的 难受 听说桶排还是会被卡 大雾 然后下来补题的时候听了队友的意见 其实比赛的时候就应该多听听 也许就能想到这个bfs了
  • 某返利网站admin目录index.php文件混淆加密算法分析

    恢复内容开始 文件已经加密 可以在此下载 index php 文件内容打开大概如此 简单字符替换之后 发现字符串用base64 decode仍无法解码 找到一个解码网站 找源码 解码后的文件如下 下载地址 尾部仍然有大量未知编码内容 简单修
  • IP协议的服务类型(翻译RFC 1349)

    目录 1 简介 2 目标和理念 3 服务八位字节类型规范 4 TOS字段的规范 5 Internet协议中TOS字段的使用 5 1 Internet控制消息协议 ICMP 5 2传输协议 5 3应用协议 6 ICMP和TOS字段 6 1无法
  • 圆投影匹配算法描述及实现

    解决模板图和基准图之间存在任意角度旋转的景象匹配问题的关键是找到一个旋转不变量 圆投影匹配算法就是利用 圆 的各向同性和投影特征提出来的 传统的图像匹配算法 如归一化交叉互相关算法 主要利用像素点与像素点之间的相关性计算匹配图像与模板之间的
  • 数据结构day4

    https note youdao com s SwyFfOgRhttps note youdao com s SwyFfOgR 学生管理系统 头文件 ifndef STULIST H define STULIST H include
  • Qt布局的使用

    1 控件的sizePolicy设置了Fixed 再一点击设置布局 控件的大小又自动调整了 解决方法 设置布局后 再手动调整控件大小 2 在要布局的部件上 右键 gt Lay out 如果该部件不支持布局 则右键菜单中不会出现 Lay out
  • Hadoop学习——MapReduce的job机制和job链介绍

    前边写了MapReduce的介绍 以及四大组件 序列化机制和排序 这一篇记录一下MapReduce相关的job机制 对于在代码里 我们总要有一个Driver 比如下边 public static void main String args
  • ORA-01075,ORA-09925 Read-only file system问题一例

    OEL 5 7 ORACLE RAC 11 2 0 2 在运行过程中系统监控台出现journal commit I O error的信息 SQL gt oradebug Message from syslogd at Fri Oct 14
  • java 远程接口_java中如何正确的使用远程接口

    服务器必须包含一个扩展了UnicastRemoteObject的类 并实现远程接口 这个类也可以含有附加的方法 但客户只能使用远程接口中的方法 这是显然的 因为客户得到的只是指向接口的一个句柄 而非实现它的那个类 必须为远程对象明确定义构建
  • JVM 内存模型

    内存划分 java虚拟机按照运行时内存使用区域划分如图 区域 是否线程共享 是否会内存溢出 程序计数器 否 不会 java虚拟机栈 否 会 本地方法栈 否 会 堆 是 会 方法区 是 会 一 程序计数器 Program Counter Re
  • Qt中的 connect 函数

    1 connect 函数实现的是信号与槽的关联 注意 只有QO bject类及其派生的类才能使用信号和槽的机制 2 函数原型 static QMetaObject Connection connect const QObject sende