qt 开启线程接收串口数据并由主线程界面实时显示
时间: 2023-09-25 22:03:17 浏览: 184
在Qt中,可以通过QThread类来创建线程,通过QSerialPort类来实现串口通信。下面是一个示例代码,演示了如何开启线程接收串口数据,并通过主线程界面实时显示。
```cpp
#include <QApplication>
#include <QSerialPort>
#include <QThread>
#include <QTextEdit>
#include <QObject>
// 自定义线程类,用于接收串口数据
class SerialThread : public QThread {
Q_OBJECT
public:
explicit SerialThread(QObject *parent = nullptr) : QThread(parent) {}
protected:
void run() override {
QSerialPort serial;
serial.setPortName("COM1"); // 设置串口号,根据实际情况修改
serial.setBaudRate(QSerialPort::Baud115200); // 设置波特率,根据实际情况修改
if (!serial.open(QIODevice::ReadOnly)) {
emit error(serial.errorString());
return;
}
while (!isInterruptionRequested()) {
if (serial.waitForReadyRead(100)) {
QByteArray data = serial.readAll();
emit newData(data);
}
}
serial.close();
}
signals:
void error(const QString &errorMsg);
void newData(const QByteArray &data);
};
// 主窗口类
class MainWindow : public QTextEdit {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr) : QTextEdit(parent) {}
public slots:
void handleError(const QString &errorMsg) {
append("错误:" + errorMsg);
}
void handleNewData(const QByteArray &data) {
append("接收数据:" + QString(data));
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.resize(400, 300);
mainWindow.show();
SerialThread serialThread;
QObject::connect(&serialThread, &SerialThread::error, &mainWindow, &MainWindow::handleError);
QObject::connect(&serialThread, &SerialThread::newData, &mainWindow, &MainWindow::handleNewData);
serialThread.start();
return app.exec();
}
#include "main.moc"
```
以上代码实现了一个简单的Qt应用程序,在主线程显示的文本框中实时输出从串口接收到的数据。你需要根据实际情况修改串口号和波特率。