Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 向自定义Qthread添加信号_Multithreading_Qt_Signals - Fatal编程技术网

Multithreading 向自定义Qthread添加信号

Multithreading 向自定义Qthread添加信号,multithreading,qt,signals,Multithreading,Qt,Signals,我试图向qthread添加一个信号,但我得到一个错误提示: 错误:未定义对“RFDongleCommunication的vtable”的引用 错误:未定义对“RFDongleCommunication::newLogger(无符号字符,无符号字符)”的引用 这是我的头文件: #ifndef RFDONGLECOMMUNICATION_H #define RFDONGLECOMMUNICATION_H #include <QThread> #include "qextserialpor

我试图向qthread添加一个信号,但我得到一个错误提示:

错误:未定义对“RFDongleCommunication的vtable”的引用

错误:未定义对“RFDongleCommunication::newLogger(无符号字符,无符号字符)”的引用

这是我的头文件:

#ifndef RFDONGLECOMMUNICATION_H
#define RFDONGLECOMMUNICATION_H
#include <QThread>
#include "qextserialport.h"
#include <QtGui>

class RFDongleCommunication: public QThread
{
    Q_OBJECT

public:
    explicit RFDongleCommunication(QextSerialPort * port);

    QextSerialPort * rfport;
    QByteArray data;

signals:

    void newLogger(uchar,uchar);

private:

    void run();

};

#endif // RFDONGLECOMMUNICATION_H

有人知道我做错了什么吗?

让舒尔成为您的班级,并将其放在MOC流程生成中包含的不同的.cpp和.h文件中

点击:文件-新文件或项目文件和类-C++ + New 阶级


对'vtable的未定义引用意味着没有生成moc cpp文件。

我看到这是一篇非常古老的帖子,但人们似乎仍然在问非常相似甚至完全相同的问题。我会详细阐述鲁道夫·邦杜利斯(Rudolfs Bundulis)给出的答案,希望能有所帮助


如果您使用的是Qt Creator,并且在第一次编译项目时,您没有将“Q_对象”放入头文件中,则不会生成(qthread)cpp文件的moc cpp文件。在这种情况下,在头文件中放入“Q_对象”后简单地运行“全部清除”和“全部重建”将不起作用。您需要转到构建文件夹手动删除Qt生成的“Makefile”并再次运行“Rebuild All”或“build All”,错误消息将消失。

您确定您的头正在被moc'ed吗?不,因为我不知道这是什么…我想您应该添加“#include”并尝试如何构建源代码?Qt包含一个特殊的预处理器,在编译源代码之前,它获取带有
Q_对象的头文件
定义并处理信号/插槽和其他Qt相关信息。如果没有发生,C++将无法处理结果。顺便说一句,这里有几个帖子可以回答你的问题。
#include "rfdonglecommunication.h"
#include "QDebug"

RFDongleCommunication::RFDongleCommunication(QextSerialPort * port)
{
    rfport=port;
}

void RFDongleCommunication::run()
{
    while(!(rfport->bytesAvailable()));
    data = rfport->readAll();

    uchar id = data[1];
    uchar type = data[2];
    emit newLogger(id,type); 
}