Проблема
QSerialPort
из версии 5.13.1 библиотеки Qt физически не выводит данные под Windows 7 и 10.
Пример
Для демонстрацииОписанная проблема Я подготовил следующую настройку:
- Аппаратное обеспечение
Я проверил соединение между ПК с физическим последовательным портом (COM1) и реальным последовательным устройством, но в демонстрационных целях я создал простой шлейф, соединив контакты 2 и 3 разъема DSub ПК, т.е. Tx и Rx.
Программное обеспечение
Проблема возникает в моих собственных приложениях с графическим интерфейсом, а также в официальных примерах, поставляемых с Qt.Однако ради демонстрации я написал очень простое консольное приложение:
SerialBug.pro
QT -= gui
QT += serialport
CONFIG += console
SOURCES += \
main.cpp
main.cpp
#include <QCoreApplication>
#include <QSerialPort>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSerialPort port("COM1");
port.setBaudRate(QSerialPort::Baud4800);
port.setDataBits(QSerialPort::Data8);
port.setStopBits(QSerialPort::OneStop);
port.setParity(QSerialPort::NoParity);
port.setFlowControl(QSerialPort::NoFlowControl);
QObject::connect(&port, &QSerialPort::readyRead,
[&port](){
qDebug() << port.readAll();
});
QObject::connect(&port, &QSerialPort::bytesWritten,
[](qint64 bytes){
qDebug() << bytes;
});
QObject::connect(&port, &QSerialPort::errorOccurred,
[](QSerialPort::SerialPortError error){
qDebug() << error;
});
if (port.open(QSerialPort::ReadWrite)) {
qDebug() << port.write("Test");
}
return a.exec();
}
Результат
Скомпилировав и выполнив пример кода с MSVC2017 и Qt 5.13.0 в режиме выпуска, будет получен следующий вывод:
QSerialPort::NoError
4
4
"Test"
Точно так жекод, скомпилированный в режиме выпуска с MSVC2017, но на этот раз с Qt 5.13.1, выдает следующий вывод:
QSerialPort::NoError
4
port.write
возвращает 4
, то есть 4 байта отправляются на последовательный порт, ноэто на самом деле не сделано.bytesWritten
не отправляется и данные не считываются.
Примечание: Программа последовательного монитора показывает записанные данные, но данные не достигают выводов.
Можно ли каким-либо образом исправить код, чтобы он работал с Qt5.13.1?