c++ - 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++ - 可加载的 macOS 捆绑符号与动态库中的符号冲突
- html - 页脚代码在 CSS 样式表中显示为红色,但 HTML 代码很好
- google-classroom - 为 API Google Classroom 求批量级补丁
- c# - 有没有办法使用 Confluent.Kafka .Net 客户端查询主题的复制因子和保留时间?
- amazon-web-services - 使用无服务器框架为 SQS 创建 s3 事件
- javascript - 使用按钮扩展截断文本和使用处理程序的跨度的区别
- python - Pygame 从 .txt 文件中读取字符串,然后用作颜色错误
- blockchain - 谁能澄清用户在以太坊区块链上使用智能合约功能需要多少成本?
- c# - Mongodb 在第一次连接时总是超时
- electron - 发布电子应用程序以避免 Windows Defender 和 Smart Screen 的最佳方法是什么?