错误:'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】:QSerialPort
和 QThread
都派生自 QObject
,因此在您的代码中,您有来自 QObject
的多重继承,这在 Qt
中是被禁止的。您应该只从QThread
派生,但这不是很好的方法。最好的方法是创建简单的Worker
类,派生自QObject
,其中HAS
QSerialPort
,并将这个类移动到带有moveToThread()
的某个线程。
您可以在here 或documentation 中找到有关正确用法的更多信息。
关于单独线程中串口的完整示例,您可以找到here,它是俄语,但您只需要不太复杂的代码。
【讨论】:
以上是关于错误:'QObject' 是 'SerialPort' QObject::connect(&uartObj, SIGNAL(readDone(QByteArray)), this, SLOT(的主要内容,如果未能解决你的问题,请参考以下文章
QObject::connect: 没有这样的信号错误 C++
如何修复python中opencv中的错误“QObject::moveToThread:”?