繁体   English   中英

'qRegisterMetaType':重新定义; 以前的定义是“功能”

[英]'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':重新定义; 以前的定义是“功能”

  1. qRegisterMetaType<FileNodePointer>("FileNodePointer"); 应该被调用一次(主要是在构造函数中等)
  2. 确保connectqRegisterMetaType中的类型相同:
    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM