将类添加到基本 Qt GUI 应用程序时出现 Qt 链接器错误

Qt linker error when adding class to basic Qt GUI application(将类添加到基本 Qt GUI 应用程序时出现 Qt 链接器错误)

本文介绍了将类添加到基本 Qt GUI 应用程序时出现 Qt 链接器错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经苦苦挣扎了一段时间,无法弄清楚这一点.我在我的基本 Qt GUI 应用程序中添加了一个类,但我遇到了链接器错误.我看不出是什么原因造成的,希望得到反馈.

I have been struggling for some time now and can't figure this out. I added a class to my basic Qt GUI application and i got linker errors. I don't see what can cause this and are hoping for feedback.

链接器错误:

main.obj:-1: error: LNK2019: unresolved external symbol "public: void __thiscall Serial::start(enum QSerialPort::BaudRate)" (?start@Serial@@QAEXW4BaudRate@QSerialPort@@@Z) referenced in function _main

main.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall Serial::Serial(class QObject *)" (??0Serial@@QAE@PAVQObject@@@Z) referenced in function _main

debugTest.exe:-1: error: LNK1120: 2 unresolved externals

这是项目文件:

#-------------------------------------------------
#
# Project created by QtCreator 2013-11-18T10:08:32
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Test
TEMPLATE = app


SOURCES += main.cpp
        mainwindow.cpp 
    serial.cpp

HEADERS  += mainwindow.h 
    serial.h

FORMS    += mainwindow.ui

serial.h 文件:

serial.h file:

#ifndef SERIAL_H
#define SERIAL_H

#include <QObject>
#include <QtSerialPort/QSerialPort>

class Serial : public QObject
{
    Q_OBJECT
public:
    explicit Serial(QObject *parent = 0);
    void start(QSerialPort::BaudRate baudRate);
    bool Serial::closePort();
    void Serial::readData();

signals:

public slots:

};

#endif // SERIAL_H

serial.cpp 文件:

serial.cpp file:

#include "serial.h"
#include <QObject>
#include <QtSerialPort/QSerialPort>

Serial::Serial(QObject *parent) :
    QObject(parent)
{
    serial = new QSerialPort(this);
    connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
}

bool Serial::start(QSerialPort::BaudRate baudRate)
{
    if(serial.open(QIODevice::ReadWrite))
    {
        //TODO: Connection OK is green in GUI
        QDebug << "Port opened successfully" << std::endl;
        return true;
    }
    else
    {
        //Open failed.
        QDebug << "Port failed to open" << std::endl;
        //TODO: Show error window in GUI
        return false;
    }

    if(
        serial.setBaudRate(baudRate) &&
        serial.setDataBits(QSerialPort::Data8) &&
        serial.setParity(QSerialPort::NoParity) &&
        serial.setStopBits(QSerialPort::OneStop) &&
        serial.setFlowControl(QSerialPort::NoFlowControl)
      )
    {
        //Connection ok.
        QDebug << "Parameters set OK" << std::endl;
    }
    else
    {
        QDebug << "Parameters set FAILED" << std::endl;
        Serial::closePort();
    }
}

bool Serial::closePort()
{
    serial.close();
    //TODO: Connection OK is red in GUI
}

void Serial::readData()
{
    this->readDataArray = this->serial.readAll();
}

推荐答案

如上所述 这里,因为 QtSerialPort 是一个附加模块,您需要将其显式添加到您的项目中:

As noted here, because QtSerialPort is an add on module you need to explicitly add it to your project:

QT += serialport

这篇关于将类添加到基本 Qt GUI 应用程序时出现 Qt 链接器错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:将类添加到基本 Qt GUI 应用程序时出现 Qt 链接器错误

基础教程推荐