QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>'

   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);
}

 

     

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值