Я видел несколько вопросов и много гуглил, и не могу найти способ объявить объект последовательного порта, используя qextserialport, для чтения и записи в / из arduino. Я попробовал то, что сделал пользователь в Как написать на последовательный порт, используя Qextserialport, но компилятор выдает мне следующую ошибку:
undefined reference to `QextSerialPort::QextSerialPort(QString const&, QextSerialPort::QueryMode, QObject*)'
Вот код, который я использую:
#include "mainwindow.h"#include "ui_mainwindow.h"
#include <QtExtSerialPort/qextserialport.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_BTN_Connect_clicked()
{
int index=ui->Selector_Port->currentIndex();
QextSerialPort *port = new QextSerialPort("/dev/ttyACM0");
}
Почему эта ошибка появляется? Я использую Debian 8.2 и QT 4.8.6
РЕДАКТИРОВАТЬ:
После добавления строк:
CONFIG += qesp_linux_udev
QT += extserialport
в файл проекта, у меня появляется следующая ошибка:
"Project MESSAGE: Warning: unknown QT: extserialport"
Сообщение об ошибке генерируется компоновщиком. Это означает, что он не может найти QextSerialPort
двоичные файлы библиотеки
В соответствии с Руководство по QextSerialPort QextSerailPort
в Qt4 можно использовать только в Compat Mode:
Может использоваться как статическая или совместно используемая библиотека или просто интегрировать
компонент в приложении.
Самое простое решение — просто построить QextSerailPort
вместе с вашим основным проектом. Просто включите его в файл вашего проекта (.pro
):
include(pathToQesp/compat/qextserialport.pri)
Вы не должны QT += extserialport
, так как в Compat Mode он не используется как модуль Qt.
Самый простой HowTo
mkdir test && cd test
git clone https://github.com/qextserialport/qextserialport
extserialtest
Итак, у вас есть две папки:
qextserialport
с QextSerailPort
пакетextserialtest
с вашим проектом Qtinclude (../qextserialport/src/qextserialport.pri)
в extserialtest.pro
#include <qextserialport.h>
а также new QextSerialPort("/dev/ttyACM0");
Проверено на Qt 4.8.3 в Linux, что оно работает из коробки.
Других решений пока нет …