C++ 使用QT Creator在QSerialPort中定义多个错误
我最近开始做我的最后一个项目来完成我的学习。在这个项目中,我必须继续以前的学生的工作,这要求我使用QT Creator,这对我来说是未知的。 到目前为止,该项目是一个UI应用程序,用于使用串行通信从直升机接收数据 当我试图编译代码时,会弹出以下错误:C++ 使用QT Creator在QSerialPort中定义多个错误,c++,qt,serial-port,C++,Qt,Serial Port,我最近开始做我的最后一个项目来完成我的学习。在这个项目中,我必须继续以前的学生的工作,这要求我使用QT Creator,这对我来说是未知的。 到目前为止,该项目是一个UI应用程序,用于使用串行通信从直升机接收数据 当我试图编译代码时,会弹出以下错误: C:\Qt\Qt5.1.1\5.1.1\mingw48_32\lib\libQt5SerialPortd.a(d000044.o):-1: error: multiple definition of `QSerialPort::error(QSer
C:\Qt\Qt5.1.1\5.1.1\mingw48_32\lib\libQt5SerialPortd.a(d000044.o):-1: error: multiple definition of `QSerialPort::error(QSerialPort::SerialPortError)'
debug\moc_qserialport.o:D:\Development\Code\QTWorkspace\build-BEP-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\moc_qserialport.cpp:520: error: first defined here
C:\Qt\Qt5.1.1\5.1.1\mingw48_32\lib\libQt5SerialPortd.a(d000012.o):-1: error: multiple definition of `QSerialPort::qt_metacast(char const*)'
debug\moc_qserialport.o:D:\Development\Code\QTWorkspace\build-BEP-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\moc_qserialport.cpp:387: error: first defined here
C:\Qt\Qt5.1.1\5.1.1\mingw48_32\lib\libQt5SerialPortd.a(d000011.o):-1: error: multiple definition of `QSerialPort::qt_metacall(QMetaObject::Call, int, void**)'
debug\moc_qserialport.o:D:\Development\Code\QTWorkspace\build-BEP-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\moc_qserialport.cpp:395: error: first defined here
collect2.exe:-1: error: error: ld returned 1 exit status
项目仅包含以下头文件,而不包含相应的.cpp文件:
qserialport.h
qserialportglobal.h
qserialportinfo.h
这些是档案;
qserialportglobal.h:
#ifndef QSERIALPORTGLOBAL_H
#define QSERIALPORTGLOBAL_H
#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
#ifndef QT_STATIC
# if defined(QT_BUILD_SERIALPORT_LIB)
# define Q_SERIALPORT_EXPORT Q_DECL_EXPORT
# else
# define Q_SERIALPORT_EXPORT Q_DECL_IMPORT
# endif
#else
# define Q_SERIALPORT_EXPORT
#endif
// The macro has been available only since Qt 5.0
#ifndef Q_DECL_OVERRIDE
#define Q_DECL_OVERRIDE
#endif
QT_END_NAMESPACE
#endif // QSERIALPORTGLOBAL_H
\ifndef QSERIALPORTGLOBAL\u H
#定义QSERIALPORTGLOBAL_H
#包括
QT_开始名称空间
#ifndef QT_静态
#如果已定义(QT_构建_串行端口_库)
#定义Q_SERIALPORT_导出Q_DECL_导出
#否则
#定义Q_SERIALPORT_导出Q_DECL_导入
#恩迪夫
#否则
#定义Q_SERIALPORT_导出
#恩迪夫
//宏仅在Qt 5.0之后才可用
#ifndef Q_DECL_覆盖
#定义Q_DECL_覆盖
#恩迪夫
QT_END_名称空间
#endif//QSERIALPORTGLOBAL\u H
qserialportinfo.h:
#ifndef QSERIALPORTINFO_H
#define QSERIALPORTINFO_H
#include <QtCore/qlist.h>
#include <QtCore/qscopedpointer.h>
#include <QtSerialPort/qserialportglobal.h>
QT_BEGIN_NAMESPACE
class QSerialPort;
class QSerialPortInfoPrivate;
class QSerialPortInfoPrivateDeleter;
class Q_SERIALPORT_EXPORT QSerialPortInfo
{
Q_DECLARE_PRIVATE(QSerialPortInfo)
public:
QSerialPortInfo();
explicit QSerialPortInfo(const QSerialPort &port);
explicit QSerialPortInfo(const QString &name);
QSerialPortInfo(const QSerialPortInfo &other);
~QSerialPortInfo();
QSerialPortInfo& operator=(const QSerialPortInfo &other);
void swap(QSerialPortInfo &other);
QString portName() const;
QString systemLocation() const;
QString description() const;
QString manufacturer() const;
quint16 vendorIdentifier() const;
quint16 productIdentifier() const;
bool hasVendorIdentifier() const;
bool hasProductIdentifier() const;
bool isNull() const;
bool isBusy() const;
bool isValid() const;
static QList<qint32> standardBaudRates();
static QList<QSerialPortInfo> availablePorts();
private:
QScopedPointer<QSerialPortInfoPrivate, QSerialPortInfoPrivateDeleter> d_ptr;
};
inline bool QSerialPortInfo::isNull() const
{ return !d_ptr; }
QT_END_NAMESPACE
#endif // QSERIALPORTINFO_H
\ifndef QSERIALPORTINFO\u H
#定义QSERIALPORTINFO_H
#包括
#包括
#包括
QT_开始名称空间
类QSerialPort;
类QSERIALPORTINFOPERVICE;
类QSerialPortInfoPrivateDeleter;
类Q_SERIALPORT_导出QSerialPortInfo
{
Q_DECLARE_PRIVATE(QSerialPortInfo)
公众:
QSerialPortInfo();
显式QSerialPortInfo(常量QSerialPort&port);
显式QSerialPortInfo(常量QString和名称);
QSerialPortInfo(常量QSerialPortInfo和其他);
~QSerialPortInfo();
QSerialPortInfo和运算符=(常量QSerialPortInfo和其他);
无效掉期(QSerialPortInfo和其他);
QString端口名()常量;
QString systemLocation()常量;
QString description()常量;
Q管柱制造商()常数;
quint16供应商识别器()常数;
quint16 productIdentifier()常量;
bool hasVendorIdentifier()常量;
bool hasProductIdentifier()常量;
bool isNull()常量;
bool isBusy()常量;
bool isValid()常量;
静态QList standardBaudRates();
静态QList AvailableReports();
私人:
QScopedPointer d_ptr;
};
内联bool QSerialPortInfo::isNull()常量
{return!d_ptr;}
QT_END_名称空间
#endif//QSERIALPORTINFO_H
和qserialport.h:
#ifndef QSERIALPORT_H
#define QSERIALPORT_H
#include <QtCore/qiodevice.h>
#include <QtSerialPort/qserialportglobal.h>
QT_BEGIN_NAMESPACE
class QSerialPortInfo;
class QSerialPortPrivate;
class Q_SERIALPORT_EXPORT QSerialPort : public QIODevice
{
Q_OBJECT
Q_PROPERTY(qint32 baudRate READ baudRate WRITE setBaudRate NOTIFY baudRateChanged)
Q_PROPERTY(DataBits dataBits READ dataBits WRITE setDataBits NOTIFY dataBitsChanged)
Q_PROPERTY(Parity parity READ parity WRITE setParity NOTIFY parityChanged)
Q_PROPERTY(StopBits stopBits READ stopBits WRITE setStopBits NOTIFY stopBitsChanged)
Q_PROPERTY(FlowControl flowControl READ flowControl WRITE setFlowControl NOTIFY flowControlChanged)
Q_PROPERTY(DataErrorPolicy dataErrorPolicy READ dataErrorPolicy WRITE setDataErrorPolicy NOTIFY dataErrorPolicyChanged)
Q_PROPERTY(bool dataTerminalReady READ isDataTerminalReady WRITE setDataTerminalReady NOTIFY dataTerminalReadyChanged)
Q_PROPERTY(bool requestToSend READ isRequestToSend WRITE setRequestToSend NOTIFY requestToSendChanged)
Q_PROPERTY(SerialPortError error READ error RESET clearError NOTIFY error)
Q_PROPERTY(bool settingsRestoredOnClose READ settingsRestoredOnClose WRITE setSettingsRestoredOnClose NOTIFY settingsRestoredOnCloseChanged)
Q_ENUMS( Directions Rate DataBits Parity StopBits FlowControl PinoutSignals DataErrorPolicy SerialPortError )
public:
enum Direction {
Input = 1,
Output = 2,
AllDirections = Input | Output
};
Q_DECLARE_FLAGS(Directions, Direction)
enum BaudRate {
Baud1200 = 1200,
Baud2400 = 2400,
Baud4800 = 4800,
Baud9600 = 9600,
Baud19200 = 19200,
Baud38400 = 38400,
Baud57600 = 57600,
Baud115200 = 115200,
UnknownBaud = -1
};
enum DataBits {
Data5 = 5,
Data6 = 6,
Data7 = 7,
Data8 = 8,
UnknownDataBits = -1
};
enum Parity {
NoParity = 0,
EvenParity = 2,
OddParity = 3,
SpaceParity = 4,
MarkParity = 5,
UnknownParity = -1
};
enum StopBits {
OneStop = 1,
OneAndHalfStop = 3,
TwoStop = 2,
UnknownStopBits = -1
};
enum FlowControl {
NoFlowControl,
HardwareControl,
SoftwareControl,
UnknownFlowControl = -1
};
enum PinoutSignal {
NoSignal = 0x00,
TransmittedDataSignal = 0x01,
ReceivedDataSignal = 0x02,
DataTerminalReadySignal = 0x04,
DataCarrierDetectSignal = 0x08,
DataSetReadySignal = 0x10,
RingIndicatorSignal = 0x20,
RequestToSendSignal = 0x40,
ClearToSendSignal = 0x80,
SecondaryTransmittedDataSignal = 0x100,
SecondaryReceivedDataSignal = 0x200
};
Q_DECLARE_FLAGS(PinoutSignals, PinoutSignal)
enum DataErrorPolicy {
SkipPolicy,
PassZeroPolicy,
IgnorePolicy,
StopReceivingPolicy,
UnknownPolicy = -1
};
enum SerialPortError {
NoError,
DeviceNotFoundError,
PermissionError,
OpenError,
ParityError,
FramingError,
BreakConditionError,
WriteError,
ReadError,
ResourceError,
UnsupportedOperationError,
UnknownError
};
explicit QSerialPort(QObject *parent = 0);
explicit QSerialPort(const QString &name, QObject *parent = 0);
explicit QSerialPort(const QSerialPortInfo &info, QObject *parent = 0);
virtual ~QSerialPort();
void setPortName(const QString &name);
QString portName() const;
void setPort(const QSerialPortInfo &info);
bool open(OpenMode mode) Q_DECL_OVERRIDE;
void close() Q_DECL_OVERRIDE;
void setSettingsRestoredOnClose(bool restore);
bool settingsRestoredOnClose() const;
bool setBaudRate(qint32 baudRate, Directions dir = AllDirections);
qint32 baudRate(Directions dir = AllDirections) const;
bool setDataBits(DataBits dataBits);
DataBits dataBits() const;
bool setParity(Parity parity);
Parity parity() const;
bool setStopBits(StopBits stopBits);
StopBits stopBits() const;
bool setFlowControl(FlowControl flow);
FlowControl flowControl() const;
bool setDataTerminalReady(bool set);
bool isDataTerminalReady();
bool setRequestToSend(bool set);
bool isRequestToSend();
PinoutSignals pinoutSignals();
bool flush();
bool clear(Directions dir = AllDirections);
bool atEnd() const Q_DECL_OVERRIDE;
bool setDataErrorPolicy(DataErrorPolicy policy = IgnorePolicy);
DataErrorPolicy dataErrorPolicy() const;
SerialPortError error() const;
void clearError();
qint64 readBufferSize() const;
void setReadBufferSize(qint64 size);
bool isSequential() const Q_DECL_OVERRIDE;
qint64 bytesAvailable() const Q_DECL_OVERRIDE;
qint64 bytesToWrite() const Q_DECL_OVERRIDE;
bool canReadLine() const Q_DECL_OVERRIDE;
bool waitForReadyRead(int msecs) Q_DECL_OVERRIDE;
bool waitForBytesWritten(int msecs) Q_DECL_OVERRIDE;
bool sendBreak(int duration = 0);
bool setBreakEnabled(bool set = true);
Q_SIGNALS:
void baudRateChanged(qint32 baudRate, QSerialPort::Directions dir);
void dataBitsChanged(QSerialPort::DataBits dataBits);
void parityChanged(QSerialPort::Parity parity);
void stopBitsChanged(QSerialPort::StopBits stopBits);
void flowControlChanged(QSerialPort::FlowControl flow);
void dataErrorPolicyChanged(QSerialPort::DataErrorPolicy policy);
void dataTerminalReadyChanged(bool set);
void requestToSendChanged(bool set);
void error(QSerialPort::SerialPortError serialPortError);
void settingsRestoredOnCloseChanged(bool restore);
protected:
qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
qint64 readLineData(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
qint64 writeData(const char *data, qint64 maxSize) Q_DECL_OVERRIDE;
private:
void setError(QSerialPort::SerialPortError error, const QString &errorString = QString());
QSerialPortPrivate * const d_ptr;
Q_DECLARE_PRIVATE(QSerialPort)
Q_DISABLE_COPY(QSerialPort)
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QSerialPort::Directions)
Q_DECLARE_OPERATORS_FOR_FLAGS(QSerialPort::PinoutSignals)
QT_END_NAMESPACE
#endif // QSERIALPORT_H
\ifndef QSERIALPORT\u H
#定义QSERIALPORT_H
#包括
#包括
QT_开始名称空间
类QSerialPortInfo;
类QSerialPortPrivate;
类Q_SERIALPORT_EXPORT Q SERIALPORT:公共设备
{
Q_对象
Q_属性(qint32波特率读取波特率写入设置波特率通知波特率更改)
Q_属性(DataBits DataBits READ DataBits WRITE setDataBits NOTIFY DataBits Changed)
Q_属性(奇偶校验读取奇偶校验写入设置奇偶校验通知奇偶校验更改)
Q_属性(停止位停止位读取停止位写入设置停止位通知停止位更改)
Q_属性(FlowControl FlowControl读取FlowControl写入设置FlowControl通知flowControlChanged)
Q_属性(DataErrorPolicy DataErrorPolicy读取DataErrorPolicy写入setDataErrorPolicy通知dataErrorPolicyChanged)
Q_属性(bool dataterminalread isdataterminalread WRITE setDataTerminalReady NOTIFY dataTerminalReadyChanged)
Q_属性(bool requestToSend READ isRequestToSend WRITE setRequestToSend NOTIFY requestToSendChanged)
Q_属性(SerialPortError错误读取错误重置clearError通知错误)
Q_属性(布尔设置存储关闭读取设置存储关闭写入设置恢复关闭通知设置存储关闭更改)
Q_枚举(方向速率数据奇偶校验停止位流量控制引脚信号数据错误策略串行端口错误)
公众:
枚举方向{
输入=1,
输出=2,
所有方向=输入|输出
};
Q_声明_标志(方向、方向)
枚举波特率{
波特率1200=1200,
波特率2400=2400,
Baud4800=4800,
波特率9600=9600,
波德19200=19200,
Baud38400=38400,
Baud57600=57600,
波特率115200=115200,
UnknownBaud=-1
};
枚举数据库{
数据5=5,
数据6=6,
数据7=7,
数据8=8,
未知数据库=-1
};
枚举奇偶校验{
无概率=0,
偶校验=2,
奇偶性=3,
空间奇偶性=4,
标记奇偶性=5,
未知概率=-1
};
枚举停止位{
一站式=1,
一和半停止=3,
TwoStop=2,
UnknownStopBits=-1
};
枚举流控制{
无流量控制,
硬件控制,
软件控制,
UnknownFlowControl=-1
};
枚举输出信号{
NoSignal=0x00,
TransmittedDataSignal=0x01,
ReceivedDataSignal=0x02,
DataTerminalReadySignal=0x04,
数据载体检测信号=0x08,
DataSetReadySignal=0x10,
环形指示器信号=0x20,
RequestToSendSignal=0x40,
ClearToSendSignal=0x80,
二次传输数据信号=0x100,
Secondary ReceivedDataSignal=0x200
};
Q_声明_标志(引脚输出信号、引脚输出信号)
枚举数据错误策略{
船长政策,
密码策略,
忽略政策,
停止接收政策,
未知策略=-1
};
枚举串行端口错误{
没有错,
DeviceFoundError,
许可错误,
开场白,
平价误差,
FramingError,
错误,
作家错误,
ReadError,
资源错误,
不支持操作错误,
未知错误
};
显式QSerialPort(QObject*parent=0);
显式QSerialPort(常量QString&name,QObject*parent=0);
显式QSerialPort(常量QSerialPortInfo&info,QObject*parent=0);
虚拟~QSerialPort();
void setPortName(常量QString&name);
QString端口名()常量;
无效设置端口(常量QSerialPortInfo&info);
bool open(OpenMode模式)Q_DECL_覆盖;
无效关闭()Q_DECL_覆盖;
v
#include <QSerialPort>
#include <QSerialPortInfo>