Object::connect: Cannot queue arguments of type 'QMap<QString,QString>'(要使用qRegisterMetaType<StringMap>进行注册)
2024-08-31 08:36:58
QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>',(Make sure 'QMap<QString,QString>' is registered using qRegisterMetaType().).
上述错误,只有在跨线程信号传递时才会出现. 因为QMap是QT可识别的基本类型,不需要再注册元对象系统中,在同一个线程中运行没有问题.
源码:
- // 线程类 thread.h
- class Thread:public QThread
- {
- Q_OBJECT
- public:
- Thread(){}
- ~Thread(){}
- protected:
- virtual void run();
- signals:
- void sendMsg(const QMap<QString,QString> &msgs);
- }
- // 信号接收类 test.h
- Test(Thread *th):m_th(th)
- {
- // 不同线程用队列方式连接
- connect(m_th,SIGNAL(sendMsg(const QMap<QString,QString> &)),this,SLOT(handle(const QMap<QString,QString> &)),Qt::QueuedConnection);
- }
解决方案:通过qRegisterMetaType()方法注册至Metype中
- // thread.h
- typedef QMap<QString,QString> StringMap; // typedef操作符为QMap起一别名
- void sendMsg(const StringMap &);
- // test.h
- Test(Thread *th):m_th(th)
- {
- // 注册QMap至元对象系统
- qRegisterMetaType<StringMap>("StringMap");
- connect(m_th,SIGNAL(sendMsg(const StringMap &)),this,SLOT(handle(const StringMap &)),Qt::QueuedConnection);
- }
http://tcspecial.iteye.com/blog/1897006
最新文章
- SQL: ROW_NUMBER
- DSP using MATLAB示例Example3.6
- mysql系统库INFORMATION_SCHEMA,MySQL,TEST,mysql系统表的作用
- iOS -iPhone5、iPhone5s、iPhone6、iPhone6Plus 屏幕适配
- 通过物理模型生成Java代码
- java之表达式陷阱
- js基本类型
- SVN中tag branch trunk用法详解
- QListWidget的QComboBox下拉列表添加复选框及消息处理
- 在Mac OS上配置Android开发环境
- 小结:Swift、OC语言中多target在代码中如何区分
- python 小白(无编程基础,无计算机基础)的开发之路,辅助知识6 python字符串/元组/列表/字典互转
- SpringMvc笔记-注解
- Python并发编程之深入理解yield from语法(八)
- MaxCompute/DataWorks权限问题排查建议
- HTML的前世今生
- heap 的一些用法
- m4a 转 wav
- dbms_stats.gather_table_stats详解
- 1033 To Fill or Not to Fill (25 分)