Я использую QSerialPort для чтения с устройства, подключенного к COM-порту на моем компьютере, и каждые полсекунды он отправляет символы на мой компьютер. Я могу прочитать их из окна qDebug, так что я знаю, что соединение работает, и Qt получает данные.
Однако я постоянно читаю из последовательного порта и пересылаю sh виджет метки на моем GUI. Метка становится пустой, когда я запускаю приложение, я думаю, что эта проблема вызвана тем, что имя метки постоянно обновляется.
Мой QserialPort управляется в конструкторе mainwindow, закрывается в деструкторе, а чтения выполняются в функции named serialReceived (), который, как мне кажется, вызывается (или заставляет метку переопределять sh) слишком часто
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
serial = new QSerialPort(this);
qDebug() << "nb ports: " << QSerialPortInfo::availablePorts().length();
foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts())
{
qDebug() << "name" << serialPortInfo.portName();
}
serial->setPortName("COM11");
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
qDebug() << "is " << serial->open(QSerialPort::ReadOnly);
qDebug() << "err " << serial->error();
//serial->write("ok");
// Create the signal and slot
connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived()));
}
MainWindow::~MainWindow()
{
delete ui;
serial->close(); // instance is closed when mainwindow destroyed
}
void MainWindow::serialReceived()
{
QByteArray ba;
ba = serial->readAll();
ui->label->setText(serial->readAll());
qDebug()<<ba;
}