0

I am supposed to create a program that simultaneously takes data from serial communication and writes them to a .csv file. The first stage (serial communication) is done, but I have problems in writing data to the .csv file. I build qtcsv library as in the git page. However, now Qt says:

error: undefined reference to `_imp___ZN5QtCSV10StringDataD1Ev'

Firstly, I am not an expert on Cpp and Qt and I think I should add a LIBS partition to .pro file or maybe in Qt. Thanks in advance.

I add my code to maybe I have made some mistakes.

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

mainwindow.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

mainwindow.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");
}

main.cpp

#include <QApplication>

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

0 Answers0