[英]'qRegisterMetaType' : redefinition; previous definition was 'function'
在我最近的项目中,我需要使用两个线程之间的连接。我使用QList类型作为参数。
connect(multiDetection, SIGNAL( detectFinished(QList<FileNode*>)),
this, SLOT( onMultiDetectFinished(QList<FileNode *>)));
要解决问题“ QObject :: connect:不能将'FileNode *'类型的参数排队(请确保已使用qRegisterMetaType()注册了'FileNode *'。“我这样做:
typedef QList<FileNode *> FileNodePointer;
qRegisterMetaType< FileNodePointer>("FileNodePointer");
FileNode是我自己定义的类。
但是当我在qRegisterMetaType上移动鼠标时,它会提醒“期望的声明”。 当我运行程序时,我得到以下信息:
'qRegisterMetaType':重新定义; 以前的定义是“功能”
qRegisterMetaType<FileNodePointer>("FileNodePointer");
应该被调用一次(主要是在构造函数中等) connect
和qRegisterMetaType
中的类型相同: qRegisterMetaType<FileNodePointer>("FileNodePointer");
connect(multiDetection, SIGNAL(detectFinished(FileNodePointer)), this, SLOT(onMultiDetectFinished(FileNodePointer)));
当我尝试从cpp文件中的全局范围使用qRegisterMetaType时,出现提示“预期的声明”。 确保从方法中调用它。 我决定在类的CTOR中调用它,该类使用我的类型作为其信号之一的参数。
// --- file Foo.h --------------
class Foo
{
// ...
};
Q_DECLARE_METATYPE( Foo );
// --- file Bar.h --------------
class Bar : public QObject
{
Q_OBJECT
public:
Bar() {
// since Bar emits Foo in its notify signal
qRegisterMetaType<Foo>("Foo");
}
signals:
void notify( const Foo& );
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.