错误:'QObject' 是 'SerialPort' QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(

Posted

技术标签:

【中文标题】错误:\'QObject\' 是 \'SerialPort\' QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(hdlRxDone(QByteArray))) 的模糊基础;【英文标题】:error: 'QObject' is an ambiguous base of 'SerialPort' QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(hdlRxDone(QByteArray)));错误:'QObject' 是 'SerialPort' QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(hdlRxDone(QByteArray))) 的模糊基础; 【发布时间】:2015-08-23 07:23:33 【问题描述】:

我想创建SerialPort 类, 它可以自动接收msg然后发出信号。

但是当我编译它时显示错误消息:

错误:“QObject”是“SerialPort”的模棱两可的基础 QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(hdlRxDone(QByteArray)));

有人可以帮我解决吗? 谢谢。

#ifndef SERIALPORT_H
#define SERIALPORT_H

#include <QObject>
#include <QSerialPort>
#include <QThread>

class SerialPort : public QSerialPort, public QThread

    Q_OBJECT
public:
    explicit SerialPort(QObject *parent = 0);
    ~SerialPort();
    void stop();

signals:
    void readDone(QByteArray data);

public slots:

private:
    void run();
;

#endif // SERIALPORT_H

【问题讨论】:

【参考方案1】:

QSerialPortQThread 都派生自 QObject,因此在您的代码中,您有来自 QObject 的多重继承,这在 Qt 中是被禁止的。您应该只从QThread 派生,但这不是很好的方法。最好的方法是创建简单的Worker 类,派生自QObject,其中HAS QSerialPort,并将这个类移动到带有moveToThread() 的某个线程。

您可以在here 或documentation 中找到有关正确用法的更多信息。

关于单独线程中串口的完整示例,您可以找到here,它是俄语,但您只需要不太复杂的代码。

【讨论】:

以上是关于错误:'QObject' 是 'SerialPort' QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(的主要内容,如果未能解决你的问题,请参考以下文章

包装 QObject::connect 错误

多继承自 QObject 和 QRunnable 错误

QObject::connect: 没有这样的信号错误 C++

如何修复python中opencv中的错误“QObject::moveToThread:”?

Pyqt5 多线程错误:QObject::connect: 无法对“QTextCursor”类型的参数进行排队

缺少带有 QObject 的派生类