【Qt开发经验】Qt信号槽连接不成功问题原因汇总

2023-11-07

以下几种情况会导致信号槽连接不成功,下面分别描述。

1. 拥有信号槽的类,必须继承QObject,声明Q_OBJECT宏。

Qt帮助手册里搜索 “Signals & Slots”,可以看到以下说明:
在这里插入图片描述

想要使用信号槽,必须继承QObject,必须加Q_OBJECT宏。

2. 信号槽函数签名不匹配

主要分以下几种情形:

  • 信号槽参数类型不匹配:如int对double。需要特别指出的是,在参数类型属于某命名空间时,要把命名空间写完整!

  • 信号槽参数个数不匹配;

  • 数签名只需要参数类型,不可以写参数名称和返回值。如:void func(int a)要写成func(int)。

3. 连接方式为Qt::QueuedConnection时,参数类型没有注册。

需要使用

qRegisterMetaType<此处为变量类型名称>("此处为变量类型名称");

来注册。
在Qt帮助手册中搜索qRegisterMetaType,有相关说明。

注意在连接方式为Qt::DirectConnection(阻塞式触发),不存在此问题。因为阻塞式触发,只需要将参数进行值传递,拷贝过去即可。而以Qt::QueuedConnection(消息队列式)连接的情况下,需要将变量转成通用数据类型QVariant存储,而用QVariant存储,必须要注册此类型。

4. 两个子线程之间在运行时,从一个线程connect另外一个线程,会提示连接不成功。

解决方法:通过主线程中转信号。

5.connect时,信号槽函数参数只要给出类型,不要写参数名称。

如连接

connect(this, SIGNAL(sigOk(int)),this,SLOT(slotOk(int)))

写成下面这样是错误的:

connect(this,SIGNAL(sigOk(int value)),this,SLOT(slotOk(int value)))

根据需要,可以采用另外一种connect方式:

connect(this, &MyClass::sigOk, this, &MyClass::slotOk);

这种方式可以不写参数,更简单,但是正因为不写参数,如果出现问题,就会比较隐晦,根据实际需要使用。


本文原创发布于公众号Qt未来工程师。

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

【Qt开发经验】Qt信号槽连接不成功问题原因汇总 的相关文章

  • Qt源码分析之QObject

    在分析源码之前 我们先来介绍下Pimpl机制 Pimpl机制介绍 Pimpl private implementation 字面意思是私有实现 具体实现是将类的 假设类A 私有数据和函数放入一个单独的类 假设类Pimpl 中 然后在类A的头
  • OpenCV人脸检测及识别(深度学习)

    简介 最近做了一个人脸检测以及识别的程序 很多的文章都有比较详细的叙述 可以自行查找 但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干 不是否认质量 是侧重点问题 所以结合我遇到了一些问题 现在做个总结 本文主要叙述实现的思路
  • QString和QByteArray的区别

    QString和QByteArray的区别 本质 格式转换 QString字符串格式化打印 长度 本质 QString是对QByteArray的再次封装 QString可以通过char 来构造 也可以通过QByteArray来构造 QByt
  • Qt数据库编程

    Qt数据库编程 版本说明 版本 作者 日期 备注 0 1 loon 2018 10 25 初稿 目录 文章目录 Qt数据库编程 版本说明 目录 一 需求和目的 二 使用说明 1 Qt 5 6 0的数据库操作类 2 Driver Layer
  • QT信号和槽

    系列文章目录 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一
  • QProgressDialog进度条类

    QProgressDialog 常用API 简单的使用 QProgressDialog类是QDialog的子类 通过这个类我们可以得到一个带进度条的对话框窗口 常用API 构造函数 参数 labelText 对话框中显示的提示信息 canc
  • Qt之QGraphicsView进阶篇

    前言 上一章节介绍了 QGraphicsView 中的基础内容 具体请参考 Qt之QGraphicsView入门篇 这一章节我们来具体了解一下 GraphicsView 框架中有哪些特性 缩放与旋转 QGraphicsView 通过 QGr
  • windeployqt.exe的使用与避坑(windows平台)

    1 介绍 windeployqt exe是Qt自带的工具 用于创建应用程序发布包 简单来说 这个工具可以自动地将某程序依赖的库 资源拷贝到其所在目录 防止程序在其他电脑上运行报找不到库的错误 这里贴上官方文档 https doc qt io
  • Qt中的QString与int、const char 、ASCII码互相转换

    1 QString 转 int bool ok QString str1 0xf8 int value1 str1 toInt ok 16 qDebug lt lt ok lt lt lt lt value1 true 248 QStrin
  • Qt:读写SVG

    Qt 读写SVG 绘制SVG图形 SvgView SvgView const QString file QWidget parent QWidget parent doc new QSvgRenderer file this QSvgRen
  • 什么是Qt信号槽机制

    1 信号和槽概述 信号槽是 Qt 框架引以为豪的机制之一 所谓信号槽 实际就是观察者模式 发布 订阅模式 当某个 事件 发生之后 比如 按钮检测到自己被点击了一下 它就会发出一个信号 signal 这种发出是没有目的的 类似广播 如果有对象
  • Qt内存泄露(总结)

    一 简介 Qt内存管理机制 Qt 在内部能够维护对象的层次结构 对于可视元素 这种层次结构就是子组件与父组件的关系 对于非可视元素 则是一个对象与另一个对象的从属关系 在 Qt 中 在 Qt 中 删除父对象会将其子对象一起删除 C 中del
  • QT开发(二)(信号和槽)

    QT开发 标准信号和槽 自定义槽 带参信号 Lambda表达式 代码 标准信号和槽 main cpp如图所示 诸多的控件应该在主窗口中去实现而不应在主函数中实现 改变编码 TOOLS gt options gt TextEditor gt
  • Qt 控制台运行无法弹出小黑框

    Qt Console Application Qt 主要是GUI界面的设计 但在学习的时候控制台运行显得更加方便一些 小编在第一次新建控制台运行的时候 点击运行没有弹出小黑框 解决方法 主要是因为没有执行qmake 就需要在Qt的pro文件
  • Qt-4.7.2在dm365下的移植

    此篇为我的上一篇博客 Qt 4 7 2及QtEmbedded 4 7 2在ubuntu11 10下的安装 后续 主要参考 博客http blog chinaunix net uid 25652733 id 291521 html 同样 参照
  • QT中日期和时间类

    QT中日期和时间类 QDate QTime QDateTime QDate QDate类可以封装日期信息也可以通过这个类得到日期相关的信息 包括 年 月 日 构造函数 QDate QDate QDate QDate int y int m
  • Qt: QStringList去除重复元素

    项目中有个需求 有一个Qt字符串列表 里面有一些元素是重复的 要求去除 只留下不重复的元素 方法如下 QStringList distin QStringList list A B C D B B E B E C for int i 0 i
  • QT 中的延时函数和精准定时器的用法

    一 QT中的延时函数比较常用的三种方法 第一种 void MainWindow Delay int msec 这个最准 非阻塞方式延时 现在很多人推荐的方法 QEventLoop loop QTimer singleShot msec lo
  • Qt常用数据类型

    常用数据类型 1 常用基本数据类型 常用接口 求绝对值 T是泛型 以下都是 T qAbs const T t 最大值和最小值 会把最大或最小的返回出来 T qMax const T value1 const T value2 T qMin
  • Qt QModbusTcpServer类

    1 概述 QModbusTcpServer类表示使用TCP服务器与Modbus客户端进行通信的Modbus服务器 Header include

随机推荐

  • 最长公共子序列以及最长公共子串

    前言 LCS定义 一个数列S 如果分别是另个或多个已知数列的子序列 且是所有匹配此条件中最长的 则称S是已知数列的最长公共子序列 举个例子 s序列 A B C B D A B t序列 B D C A B A 他们的最长公共子序列为 B C
  • 手机敲代码软件_适合编写C语言代码的编程软件有哪些?大学生赶紧行动起来...

    C语言基本上是大学计算机及其相关专业在大一上学期就会开的一门课程 但是很多学生就是在大一上学期期末的时候很着急 因为自己完全没有学好C语言 感觉一学期白学了 其实究其主要原因 还是因为你在上课认真听了 也做了课堂作业 但是却没有在课后好好的
  • 预见2020关键一年

    12月28日 以 预见2020 区块链关键一年 为主题的2019年第二届中国区块链产业经济年会在北京国际金融博物馆隆重举行 本次大会在中国移动通信联合会区块链专委会 中关村大数据产业联盟 中国电子商会区块链专委会的指导下 由全球领先的区块链
  • sc不为内部或外部命令

    tomcat 注册服务 sc config netman start auto sc 不为内部或外部命令 解决方法 用管理员权限打开cmd C Windows cmd exe
  • iframe设置cookie_惊艳面试官的 Cookie 介绍

    关注在看 以后更多干货分享在头条 Cookie 是什么 Cookie 是用户浏览器保存在本地的一小块数据 它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上 Cookie 主要用于以下三个方面 会话状态管理 如用户登录状态 购物
  • linux系统下“rwx“的概念及用法~

    我们知道 一个文件它的权限情况是怎样的 可以使用用 ls l 查看详细信息这样一条指令 但显示出来的 rwxrwxrwx 究竟是什么意思呢 就让我们来了解一下 r read 读 对文件查看该源文件内容 对目录有查看的权限 w white 写
  • nacos--基础--1.3--理论--架构

    nacos 基础 1 3 理论 架构 1 基本架构及概念 1 1 服务 Service 是指一个或一组软件功能 例如特定信息的检索或一组操作的执行 其目的是不同的客户端可以为不同的目的重用 例如通过跨进程的网络调用 Nacos 支持主流的服
  • easyui 修改window title 正确用法 亲测

    错误用法 mySoftModal panel title 修改title 出现问题 不能拖拽 正确使用方法 mySoftModal window open mySoftModal window draggable true title 添加
  • 学校计算机数量减少说明,一类院校减少但招生量大涨,计算机的同学别慌

    计算机 软件工程 物联网工程 数字媒体技术 网络工程 这5个联考专业是理工类第一大专业 2019年100分以上人数达到3413 相信2020年人数也会平稳增长 同时 一类院校全部停招 充满了竞争的火药味儿 数据解读 2019年 计算机等联考
  • Qt中常见的坐标位置函数的梳理包括x、y、pos()、rect()、size()和geometry()等

    Qt中常见的坐标位置函数的梳理包括x0 y pos rect size 和geometry 等 1 画图梳理 x0 y0和pos 函数的作用都是获得整个窗体左上角的坐标位置 frameGeometr与 函 数与geometry 函数相对应
  • tensorflow学习笔记(三十):tf.gradients 与 tf.stop_gradient() 与 高阶导数

    gradient tensorflow中有一个计算梯度的函数tf gradients ys xs 要注意的是 xs中的x必须要与ys相关 不相关的话 会报错 代码中定义了两个变量w1 w2 但res只与w1相关 wrong import t
  • C语言实现字符串逆序输出

    键盘输入一个字符串 实现逆序输出 刚看到题的时候想到了交换两边的字符 然后实现逆序输出 但是有思路却不知道怎么来实现 通过在CSDN里面搜索 看了别人对这个题的实现 才豁然开朗 然后关了CSDN界面 自己动手在VSCode里面写 中间还碰到
  • Python 自动化收取蚂蚁森林能量,不错过暗恋的她(附源码)

    作者 锅g头来源 Crossin的编程教室 最近在家远程工作 结果作息更混乱了 早上起不来 导致我蚂蚁森林能量天天被偷 严重影响我沙漠造树 大业 于是我决定用python写个自动偷能量的程序 每天早上定时偷取好友能量 称霸 蚂蚁森林 本文仅
  • Pygame中的两种键盘按键捕获方式

    在Pygame中 针对键盘按键的捕获 有两种 第一种 判断event type pygame KEYDOWN if event type pygame KEYDOWN and event key pygame K RIGHT print 向
  • apifox自动生成接口文档(支持外部访问)

    快速上手 Apifox 帮助文档 项目场景 目前负责一个外部的项目 类似于总部提供接口给分公司的开发 由于内网限制 网络安全 某些原因导致swagger等接口文档不能访问 于是考虑使用 ApiFox 使用原因 网上综合评论都是 效率 查看
  • SpringBoot文件上传与下载

    实现文件上传与下载功能 主要涉及5个文件 maven配置文件pom xml application yml配置文件 用户交互界面index jsp UpanddownController控制层代码 启动文件Application githu
  • Python中的ThreadPoolExecutor

    ThreadPoolExecutor 是 Python 的 concurrent futures 模块中提供的一个类 用于创建线程池 从而在多线程环境中并发地执行任务 ThreadPoolExecutor 提供了一种高级的接口来异步地提交任
  • Design compiler 和 Prime time的区别

    相信很多新手同学在接触数字IC不久一定会有过这样的疑问 design compiler和 prime time 它两的区别是啥 如果你没有过 那你好好反思一下 既然design compiler 可以report path的timing 那
  • 基础实验 3-2.1 一元多项式求导 (20 分)

    设计函数求一元多项式的导数 输入格式 以指数递降方式输入多项式非零项系数和指数 绝对值均为不超过1000的整数 数字间以空格分隔 输出格式 以与输入相同的格式输出导数多项式非零项的系数和指数 数字间以空格分隔 但结尾不能有多余空格 输入样例
  • 【Qt开发经验】Qt信号槽连接不成功问题原因汇总

    以下几种情况会导致信号槽连接不成功 下面分别描述 1 拥有信号槽的类 必须继承QObject 声明Q OBJECT宏 Qt帮助手册里搜索 Signals Slots 可以看到以下说明 想要使用信号槽 必须继承QObject 必须加Q OBJ