LINUX.ORG.RU

QtSerialPort

 


0

2

В продолжение этой ветки:

Возникла другая проблема - при подключении заголовочных файлов в инклудах, QtCreator не находит данных файлов #include <QtAddOnSerialPort/serialport.h> - подчёркивает и пишет что нет такого файла или каталога, хотя при прописывании этого #include <QtCore/QDebug> он пишет то же самое, но по кнопке выводит сообщение в дебагере.

Если просто в тупую проверить будут ли работать строки из примера

    foreach (const SerialPortInfo &info, SerialPortInfo::availablePorts()) {
        qDebug() << "Name        : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        // Example use SerialPort
        SerialPort serial;
        serial.setPort(info);
        if (serial.open(QIODevice::ReadWrite))
            serial.close();
    }
то компилятор ругается на неопределённый SerialPortInfo и т.д.

p.s. установка скомпилированных файлов прошла успешно, они находятся на своих местах.


Использование

При использовании библиотеки необходимо ее подключить в *.pro файл пользовательского проекта, это действие для Qt4 и Qt5 немного отличается:

Qt4
CONFIG += serialport
Qt5
QT += serialport



сделал?

marvin_yorke ★★★
()

p.s. установка скомпилированных файлов прошла успешно, они находятся на своих местах.

где именно? include_path туда точно дотягивается?

marvin_yorke ★★★
()

Если убрать sysroot в параметрах, то все инклуды находятся даже serialport-a, но когда начинаешь определять наследник класса, то возникает ошибка такое находится

#include <QtAddOnSerialPort/serialport.h>
но на такое компилятор матюкается
SerialPort *port;

seijuurou
() автор топика

после включения данных строк в mainwindow.cpp

#include <QtAddOnSerialPort/serialport.h>
#include <QtAddOnSerialPort/serialportinfo.h>
при наборе serial и вызове автодополнения (ctrl+space) можно выбрать только из

  • SERIALPORTINFO_H
  • SERIALPORT_GLOBAL_H
  • SERIALPORT_H
seijuurou
() автор топика
Ответ на: комментарий от seijuurou

Добавь:

QT_USE_NAMESPACE_SERIALPORT

В Вики же черным по белому написано, в примерах тоже это есть!

Если без этого макроса, то объекты будут доступны что-то типа через

QtAddOn::SerialPort::SerialPort port;

kuzulis ★★
()

спасибо помогло. Но вот не работает при компиляции такого куска

SerialPort *port;
port->setDataBits(SerialPort::Data8);

выдаёт такую ошибку: E:\Qt\Projects\first\mainwindow.cpp:-1: ошибка: undefined reference to `_imp___ZN7QtAddOn10SerialPort10SerialPort11setDataBitsENS1_8DataBitsE'

seijuurou
() автор топика
Ответ на: комментарий от seijuurou

ХЗ. Удали все сгенеренные файлы и *.user файл, открой проект заново и пересобери

kuzulis ★★
()

Я смотрю, QtSerialPort как-то тяжко идет... По поводу него ничего сказать не могу, но могу предложить использовать QextSerialPort.

Его не обязательно устанавливать в системе, достаточно просто прописать в .pro файле что-то типа

include(qextserialport/src/qextserialport.pri)

Более подробно - по ссылке...

З.Ы.: На оффтопике я его еще не пробовал...

solovey ★★
()
Ответ на: комментарий от solovey

Я смотрю, QtSerialPort как-то тяжко идет...

Как раз таки наоборот, все идет очень даже хорошо. А вот QextSerialPort туговат немного и подзаброшен.

include(qextserialport/src/qextserialport.pri)

Для QtSerialPort тоже так можно сделать. Но QtSerialPort позиционируется как shared библиотека, поэтому упор именно на это. Хотя, кто хочет - может подключить как угодно.

kuzulis ★★
()

попробовал этот же QtSerialPort скомпилировать и запустить под кубунтой 12.04. Скомпилировалась нормально без косяков и танцев с бубнами, и даже подключить к проекту труда не составило, однако вот этот кусок кода из примера на странице руководства

foreach (const SerialPortInfo &info, SerialPortInfo::availablePorts()) {
            qDebug() << "Name        : " << info.portName();
            qDebug() << "Description : " << info.description();
            qDebug() << "Manufacturer: " << info.manufacturer();

            // Example use SerialPort
            SerialPort serial;
            serial.setPort(info);
            if (serial.open(QIODevice::ReadWrite))
                serial.close();
    }

выдаёт вот такие ошибки: /home/anton/qt/Projects/123/mainwindow.cpp:-1: ошибка: undefined reference to `QtAddOn::SerialPort::SerialPortInfo::availablePorts()'

seijuurou
() автор топика

А в треде случайно нет автора этой штуки?

KblCb ★★★★★
()
Ответ на: комментарий от kuzulis

Я имел в виду, что конкретно у ТСа наблюдаются некоторые сложности при работе с этой библиотекой. В связи с этим и предложил ему попробовать другой вариант.

Сам QtSerialPort не щупал, так что сказать про него ничего не могу. QextSerialPort пока вполне устраивает.

solovey ★★
()
Ответ на: комментарий от seijuurou

выдаёт вот такие ошибки: /home/anton/qt/Projects/123/mainwindow.cpp:-1: ошибка: undefined reference to `QtAddOn::SerialPort::SerialPortInfo::availablePorts()'

Да блин, парни, после сборки надо установить библиотеку. Убедиться что ее длл-ки лежат там где надо - в <path to Qt>\bin и <path to Qt>\lib и т.п.

Тем более, что примеры прекрасно линкуются с ней. Ищите у себя траблы.

KblCb
А в треде случайно нет автора этой штуки?

Есть :)

kuzulis ★★
()
Ответ на: комментарий от seijuurou

kuzulis

Только что проверил:

untitled.pro

 
QT += core 
QT -= gui 
TARGET = untitled 
CONFIG += console serialport 
CONFIG -= app_bundle 
TEMPLATE = app 
SOURCES += main.cpp

main.cpp

#include <QCoreApplication>
#include <QDebug>

#include <QtAddOnSerialPort/serialport.h>
#include <QtAddOnSerialPort/serialportinfo.h>

QT_USE_NAMESPACE_SERIALPORT

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // Example use SerialPortInfo
    foreach (const SerialPortInfo &info, SerialPortInfo::availablePorts()) {
        qDebug() << "Name        : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();

        // Example use SerialPort
        SerialPort serial;
        serial.setPort(info);
        if (serial.open(QIODevice::ReadWrite))
            serial.close();
    }

    return a.exec();
}

Все компилится.

seijuurou

думаю я посмотрю его всё же

Да ради бога.

kuzulis ★★
()
Ответ на: комментарий от seijuurou

kuzulis

Удали мусор от своего проекта и пересобери снова.

Также убедись, что QtSerialPort установлен корректно, надеюсь, ты делал:

$ mingw32-make.exe install
kuzulis ★★
()
Ответ на: комментарий от kuzulis

с виндой пока оставим - она на работе. Почему у меня в кубунте не работает эта штука? Консольное приложение у меня тоже компилится, только на comm socket что-то ругается в консоли, ну это может из-за того что последовательных портов у меня дома нет

seijuurou
() автор топика

вот что я получил после sudo make install [sudo] password for anton:

cd src/ && make -f Makefile install make[1]: Вход в каталог `/home/anton/serialport-build-release/src' cd serialport/ && make -f Makefile install make[2]: Вход в каталог `/home/anton/serialport-build-release/src/serialport' install -m 644 -p /home/anton/serialport-src/src/serialport/serialport-global.h /usr/include/QtAddOnSerialPort/ install -m 644 -p /home/anton/serialport-src/src/serialport/serialport.h /usr/include/QtAddOnSerialPort/ install -m 644 -p /home/anton/serialport-src/src/serialport/serialportinfo.h /usr/include/QtAddOnSerialPort/ install -m 644 -p /home/anton/serialport-src/src/serialport/qt4support/serialport.prf /usr/share/qt4/mkspecs/features/ install -m 755 -p «libSerialPort.so.1.0.0» «/usr/lib/x86_64-linux-gnu/libSerialPort.so.1.0.0» strip --strip-unneeded «/usr/lib/x86_64-linux-gnu/libSerialPort.so.1.0.0» ln -f -s «libSerialPort.so.1.0.0» «/usr/lib/x86_64-linux-gnu/libSerialPort.so» ln -f -s «libSerialPort.so.1.0.0» «/usr/lib/x86_64-linux-gnu/libSerialPort.so.1» ln -f -s «libSerialPort.so.1.0.0» «/usr/lib/x86_64-linux-gnu/libSerialPort.so.1.0» install -m 644 -p «libSerialPort.prl» «/usr/lib/x86_64-linux-gnu/libSerialPort.prl» make[2]: Выход из каталога `/home/anton/serialport-build-release/src/serialport' make[1]: Выход из каталога `/home/anton/serialport-build-release/src' cd examples/ && make -f Makefile install make[1]: Вход в каталог `/home/anton/serialport-build-release/examples' cd cenumerator/ && make -f Makefile install make[2]: Вход в каталог `/home/anton/serialport-build-release/examples/cenumerator' make[2]: Цель `install' не требует выполнения команд. make[2]: Выход из каталога `/home/anton/serialport-build-release/examples/cenumerator' cd enumerator/ && make -f Makefile install make[2]: Вход в каталог `/home/anton/serialport-build-release/examples/enumerator' make[2]: Цель `install' не требует выполнения команд. make[2]: Выход из каталога `/home/anton/serialport-build-release/examples/enumerator' cd terminal/ && make -f Makefile install make[2]: Вход в каталог `/home/anton/serialport-build-release/examples/terminal' make[2]: Цель `install' не требует выполнения команд. make[2]: Выход из каталога `/home/anton/serialport-build-release/examples/terminal' make[1]: Выход из каталога `/home/anton/serialport-build-release/examples' cd tests/ && make -f Makefile install make[1]: Вход в каталог `/home/anton/serialport-build-release/tests' cd manual/ && make -f Makefile install make[2]: Вход в каталог `/home/anton/serialport-build-release/tests/manual' cd serialportinfo/ && make -f Makefile install make[3]: Вход в каталог `/home/anton/serialport-build-release/tests/manual/serialportinfo' make[3]: Цель `install' не требует выполнения команд. make[3]: Выход из каталога `/home/anton/serialport-build-release/tests/manual/serialportinfo' cd serialport/ && make -f Makefile install make[3]: Вход в каталог `/home/anton/serialport-build-release/tests/manual/serialport' make[3]: Цель `install' не требует выполнения команд. make[3]: Выход из каталога `/home/anton/serialport-build-release/tests/manual/serialport' make[2]: Выход из каталога `/home/anton/serialport-build-release/tests/manual' make[1]: Выход из каталога `/home/anton/serialport-build-release/tests'

Куда всё это ещё копировать?

seijuurou
() автор топика
Ответ на: комментарий от kuzulis

перезапустил креатор и заработало... ппц ничего не менял

seijuurou
() автор топика
Ответ на: комментарий от kuzulis

Сейчас переделал свой проект с QextSerialPort на QtSerialPort и все бы хорошо, но CONFIG += serialport в .pro файле не помогал мне. На этапе линковки вылазили ошибки по типу

ошибка: undefined reference to `_imp___ZN7QtAddOn10SerialPort10SerialPort11setDataBitsENS1_8DataBitsE'

Библиотека установлена правильно, просто линковщику в параметрах не передавалось -lserialport1 Чтобы это поправить я в .pro файле явно указал

LIBS += -lserialport1
С таким конфигом все полетело нормально.

Прилагаемые примеры тоже из-за этого же не линковались.

Сейчас собирал на Win XP SP3, Qt libs 4.8.3, MinGW 4.6

Хотелось бы услышать фидбек от автора. С чем может быть связано, что CONFIG += serialport у меня не со всеми необходимыми параметрами настраивает линковку?

vitkorob
()
Ответ на: комментарий от vitkorob

Если речь про венду - то если кратко - то ХЗ.

Почисти все файлики от QtSerialPort из всех путей (bin, lib, mkspecs/feasures, includes), установи QtSerialPort заново.

И обязательно проверь то, что все установилось куда надо и в необходимом количестве :)

Также вполне возможно что надо использовать MinGW 4.4 вместо MinGW 4.6, т.к. Qt libs 4.8.3 для 4.4 собраны.

kuzulis ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.