Qt信号与槽传递自定义数据类型——两种解决方法
信号与槽作为qt中的核心机制,在qt应用开发中经常会用的,但是原生的信号与槽连接传参,只支持基本的数据类型,比如char,int, float,double。
如果想要在信号与槽之间传递自定义参数,比如结构体,类等,就必须特别注意,因为在编译的时候不会报错,但是在执行的时候会报错,出现失效。
如下:
信号与槽函数连接如下:
connect(&subThread,SIGNAL(notifyGps(unsigned char, GpsLocation)), this, SLOT(onNotifyGps(unsigned char , GpsLocation)));
主要用来接收gps上报的的数据,用来显示定位以及指南针转型,及录像水印等。
编译的时候不会出现报错,但是执行的时候输出错误信息如下:
QObject::connect: Cannot queue arguments of type 'GpsLocation'
(Make sure 'GpsLocation' is registered using qRegisterMetaType().)
有两种方法解决可以解决自定义参数的传递:
一、使用qRegisterMetaType()先注册自定义类型。
1、包含头文件
#include <QMetaType>
2、注册自定义类型
qRegisterMetaType<GpsLocation>("GpsLocation");
3、使用自定义类型建立连接
connect(&subThread,SIGNAL(notifyGps(unsigned char, GpsLocation)), this, SLOT(onNotifyGps(unsigned char , GpsLocation)));
#include <QMetaType>
............................
qRegisterMetaType<GpsLocation>("GpsLocation");
connect(&subThread,SIGNAL(notifyGps(unsigned char, GpsLocation)), this, SLOT(onNotifyGps(unsigned char , GpsLocation)));
二、使用直接连接方式_Qt::DrectConnection
connect(&subThread,SIGNAL(notifyGps(unsigned char, GpsLocation)), this, SLOT(onNotifyGps(unsigned char , GpsLocation)),Qt::DrectConnection);
经验证以上两种方式都可行,据说方法二官方不推荐使用,认为其不安全,目前用这种方法还没碰到过有什么问题。
Qt信号与槽传递自定义数据类型——两种解决方法的更多相关文章
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...
- IOS-43-导航栏标题navigationItem.title不能改变颜色的两种解决方法
IOS-43-导航栏标题navigationItem.title不能改变颜色的两种解决方法 IOS-43-导航栏标题navigationItem.title不能改变颜色的两种解决方法 两种方法只是形式 ...
- win7系统不能用telnet命令的两种解决方法
电脑专业人员对telnet命令都不陌生了,Telnet当成一种通信协议,在日常工作中,经常面对网络问题的人都会用到telnet命令,因为简单有效,可以帮助更快的找出问题.要是在使用过程中碰到win7纯 ...
- JavaScript监听手机物理返回键的两种解决方法
JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...
- 64位win10系统无法安装.Net framework3.5的两种解决方法
参考网站: https://blog.csdn.net/zang141588761/article/details/52177290 在Windows10中,当我们安装某些软件的时候会提示“你的电脑上 ...
- 64位win10系统无法安装.Net framework3.5的两种解决方法【转】
近日有网友反映在windows10_64位系统电脑上安装Net framework3.5,操作时总失败,怎么办呢?小编下面就介绍win10 64位系统无法安装Net framework3.5的两种解决 ...
- 电脑出现kernelbase.dll错误的两种解决方法
KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...
- URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致(两种解决方法)
下午,计划2个小时搞定,个人官网第6次升级,就可以干点轻松的事了,结果,下午多搞了2个小时,晚上又搞了2个小时,才搞定. 最后一个世界难题是,URL传递中文参数. 问题大致是这么出现的:我为" ...
- 两种解决方法 PHP Warning: File upload error - unable to create a temporary file in Unknown
原因:上传文件时,没有管理员权限的你不能读取临时文件夹; 解决方法(两种)找到临时文件夹并给当前访问用户所有权限; 方法一: 找到Apache默认的临时文件,步骤如下: 1.找到临时文件夹,一般在C: ...
随机推荐
- PHP中非常好玩的Calendar扩展学习
为什么说这个 Calendar 扩展很好玩呢?因为你基本用不到它!这个扩展是一套关于日期历法的扩展,但是对于我们来说,它没有农历的相关操作,所以对于我们中国人来说这个扩展并没有什么实际的作用.不过这并 ...
- Centos6.8阿里云linux系统下配置LAMP运行环境-mysql5.6
1.Apache #安装apache软件 yum -y install httpd #启动httpd服务 service httpd start #设置开机启动chkconfig --list htt ...
- 【tp3.2】根据不同域名来加载不同的配置文件
遇到问题: 最近遇到一个需求,需要多个公众号使用同一个项目,这就导致了不同公众号访问的数据库和公众号配置不同. 解决思路: 查看文档:http://document.thinkphp.cn/manua ...
- Java基础系列(6)- 注释
注释 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了 注释不会被执行,是给开发人员看的 书写注释是一个非常好的习惯 Java中的注释有 ...
- Charles注册
方法一:注册码注册 ** 注册码注册:** Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 亲测4.6.1可用 方法 ...
- jmeter性能实战
概述 性能测试: 通过并发工具请求服务器,提前发现性能问题,优化并解决 为什么做性能测试? 常规需求 用户反馈性能问题 项目对性能不放心 性能测试的最终目标:? 性能指标分析 多快好省 项目性能场景提 ...
- python json格式化打印
编写python脚本,调试的时候需要打印json格式报文,直接打印看不出层次,可以使用json.dumps格式化打印 import json import requests def test_json ...
- python全局变量的定义
第一:如定义在类或者函数体外,在函数或者类中引用需要用到 global声明 temp_t = "ceshi" def tmp1(): global temp_t temp_t =1 ...
- SQL连接查询的执行顺序?
sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1)from (2)on (3)join (4)where (5)group by(开始使用sele ...
- A Three-Stage Self-Training Framework for Semi-Supervised Semantic Segmentation
论文阅读笔记: A Three-Stage Self-Training Framework for Semi-Supervised Semantic Segmentation 基本信息 \1.标题:A ...