首页 > 解决方案 > Qt 5.13 中的 qtcsv 库未定义引用

问题描述

我应该创建一个程序,该程序同时从串行通信中获取数据并将它们写入 .csv 文件。第一阶段(串行通信)已完成,但我在将数据写入 .csv 文件时遇到问题。我在 git 页面中构建qtcsv库。然而,现在 Qt 说:

error: undefined reference to `_imp___ZN5QtCSV10StringDataD1Ev'

首先,我不是 Cpp 和 Qt 方面的专家,我认为我应该在 .pro 文件或 Qt 中添加一个 LIBS 分区。提前致谢。

我添加了我的代码,也许我犯了一些错误。

serialGui.pro

QT+= core gui serialport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

主窗口.h

#define MAINWINDOW_H

#include <QMainWindow>

class QSerialPort;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private slots:
    void readSerialData();
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
    QSerialPort *mSerialPort;
};
#endif // MAINWINDOW_H

主窗口.cpp

#include "ui_mainwindow.h"
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QDebug>
#include <QDir>
#include <QList>
#include "stringdata.h"
#include "reader.h"
#include "writer.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)

{
    ui->setupUi(this);
    mSerialPort = new QSerialPort(this);
    mSerialPort->setPortName("COM6");
    mSerialPort->setBaudRate(QSerialPort::Baud9600);
    mSerialPort->setDataBits(QSerialPort::Data8);
    mSerialPort->setParity(QSerialPort::NoParity);
    mSerialPort->setStopBits(QSerialPort::OneStop);
    mSerialPort->setFlowControl(QSerialPort::NoFlowControl);

    connect(mSerialPort, SIGNAL(readyRead()), this, SLOT(readSerialData()));
}

MainWindow::~MainWindow(){
    delete ui;
    delete mSerialPort;
}

void MainWindow::readSerialData(){
    QByteArray data;
    data = mSerialPort->readAll();
    qDebug()<< "Received data: "<< data;
    ui -> label -> setText(data);

    QtCSV::StringData strData;
    strData.addRow(data);
    strData.addEmptyRow();

    QString filepath = QDir::currentPath() +"\test.csv";
    QtCSV::Writer::write(filepath, strData);


}

void MainWindow::on_pushButton_clicked() {
    mSerialPort->open(QIODevice::ReadWrite);

    foreach (QSerialPortInfo item, QSerialPortInfo::availablePorts()) {
        if (item.portName() == "COM6"){
                    mSerialPort->setPort(item);
            if (!mSerialPort-> open(QIODevice::ReadWrite)){
                QMessageBox::information(this, tr("connected"), "serial communication start");
                ui->label_2->setText("Continuing");
                ui->label_3->setText("Normal");
            }
            else {
                QMessageBox::critical(this, tr("failed"), mSerialPort->errorString());
            }
        }
        else {
            qDebug() << "No connected device found";
        }
    }
}

void MainWindow::on_pushButton_2_clicked()
{
       mSerialPort->close();
       QMessageBox::information(this, tr("disconnected"), "serial communication finished");
}

主文件

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

标签: c++qtcsv

解决方案


推荐阅读