QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>',(Make sure 'QMap<QString,QString>' is registered using qRegisterMetaType().).

上述错误,只有在跨线程信号传递时才会出现.  因为QMap是QT可识别的基本类型,不需要再注册元对象系统中,在同一个线程中运行没有问题.

源码:

  1. // 线程类 thread.h
  2. class Thread:public QThread
  3. {
  4. Q_OBJECT
  5. public:
  6. Thread(){}
  7. ~Thread(){}
  8. protected:
  9. virtual void run();
  10. signals:
  11. void sendMsg(const QMap<QString,QString> &msgs);
  12. }
  1. // 信号接收类 test.h
  2. Test(Thread *th):m_th(th)
  3. {
  4. // 不同线程用队列方式连接
  5. connect(m_th,SIGNAL(sendMsg(const QMap<QString,QString> &)),this,SLOT(handle(const QMap<QString,QString> &)),Qt::QueuedConnection);
  6. }

解决方案:通过qRegisterMetaType()方法注册至Metype中

  1. // thread.h
  2. typedef QMap<QString,QString> StringMap; // typedef操作符为QMap起一别名
  3. void sendMsg(const StringMap &);
  1. // test.h
  2. Test(Thread *th):m_th(th)
  3. {
  4. // 注册QMap至元对象系统
  5. qRegisterMetaType<StringMap>("StringMap");
  6. connect(m_th,SIGNAL(sendMsg(const StringMap &)),this,SLOT(handle(const StringMap &)),Qt::QueuedConnection);
  7. }
 
 
http://tcspecial.iteye.com/blog/1897006

最新文章

  1. SQL: ROW_NUMBER
  2. DSP using MATLAB示例Example3.6
  3. mysql系统库INFORMATION_SCHEMA,MySQL,TEST,mysql系统表的作用
  4. iOS -iPhone5、iPhone5s、iPhone6、iPhone6Plus 屏幕适配
  5. 通过物理模型生成Java代码
  6. java之表达式陷阱
  7. js基本类型
  8. SVN中tag branch trunk用法详解
  9. QListWidget的QComboBox下拉列表添加复选框及消息处理
  10. 在Mac OS上配置Android开发环境
  11. 小结:Swift、OC语言中多target在代码中如何区分
  12. python 小白(无编程基础,无计算机基础)的开发之路,辅助知识6 python字符串/元组/列表/字典互转
  13. SpringMvc笔记-注解
  14. Python并发编程之深入理解yield from语法(八)
  15. MaxCompute/DataWorks权限问题排查建议
  16. HTML的前世今生
  17. heap 的一些用法
  18. m4a 转 wav
  19. dbms_stats.gather_table_stats详解
  20. 1033 To Fill or Not to Fill (25 分)

热门文章

  1. Python基本数据类型之字符串str
  2. Fail2ban + firewalld 防护doss攻击
  3. GCC编译步骤
  4. 【Oracle】创建概要文件
  5. JDBC+MYSQL初始学习
  6. C# 遍历对象下的 属性
  7. Maven安装和eclipse里面的配置
  8. Vue学习之路第十一篇:为页面元素设置class类样式
  9. WEBGL学习【十四】利用HUD技术在网页上方显示三维物体
  10. 洛谷P1428 小鱼比可爱