【发布时间】:2020-03-25 15:34:51
【问题描述】:
我正在使用 QSerialPort 从连接到我计算机上的 COM 端口的设备读取数据,它每半秒向我的计算机发送一次字符。我可以从 qDebug 窗口中读取它们,所以我知道连接正常并且 Qt 接收到数据。
但是,我不断地从串行端口读取并刷新我的 GUI 上的标签小部件。运行app的时候label变成空白,我认为这个问题是label name不断刷新造成的。
我的 QserialPort 在主窗口构造函数中进行管理,在析构函数中关闭,并且读数是在一个名为 serialReceived() 的函数中完成的,我认为该函数被频繁调用(或导致标签刷新)
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;
}
【问题讨论】:
标签: c++ qt serial-port