使用 Qt::QueuedConnection 类型连接一个信号和槽的时候,信号槽队列中的参数类型必须是系统能够识别的元类型,否组,程序会报错:Object::connection: Cannot queue arguments of type 'xxx'(Make sure 'xxx' is registered using qRegisterMetaType())。所以,对于我们自定义的数据类型作为信号槽参数传递的时候,需要使用 qRegisterMetaType() 函数对该参数进行注册。一个简单的例子:
data.h
#ifndef __data_h__
#define __data_h__
#include <QString>
#include <QList>
class A
{
public:
A( int i ) : _data(i) {}
void setData ( int i ) { _data = i; }
int getData () const { return _data; }
private:
int _data;
};
class B
{
public:
B() {}
int dataCount () const { return _dataList.count(); }
void addData ( const A& a ) { _dataList.append(a); }
const A& getData ( int index ) const { return _dataList.at(index); }
A& getData ( int index ) { return _dataList[index]; }
void setName ( const QString& name ) { _name = name; }
QStrin