QT开发中文网

QThread循环读取QSerialPort

您可以使用QThreadQSerialPort来实现循环读取QSerialPort的数据。以下是一个简单的示例代码:

#include <QCoreApplication>
#include <QThread>
#include <QSerialPort>
#include <QDebug>

class SerialPortThread : public QThread
{
    Q_OBJECT

public:
    explicit SerialPortThread(QObject *parent = nullptr)
        : QThread(parent)
    {
        // 在构造函数中初始化串口
        serialPort.setBaudRate(QSerialPort::Baud115200);
        serialPort.setParity(QSerialPort::NoParity);
        serialPort.setDataBits(QSerialPort::Data8);
        serialPort.setStopBits(QSerialPort::OneStop);
        connect(&serialPort, &QSerialPort::readyRead, this, &SerialPortThread::onReadyRead);
    }

signals:
    void newDataReceived(const QByteArray &data);

protected:
    void run() override
    {
        if (!serialPort.open(QIODevice::ReadOnly)) {
            qDebug() << "Failed to open serial port.";
            return;
        }

        while (!isInterruptionRequested()) {
            if (serialPort.waitForReadyRead(1000)) { // 等待1秒钟,如果有新数据则读取并发送信号
                emit newDataReceived(serialPort.readAll());
            }
        }

        serial.close();
    }

private slots:
    void onReadyRead()
    {
       // 如果需要在主线程处理数据,可以在这里进行处理。
       // 或者直接发送信号,让主线程进行处理。
       // 如:emit newDataReceived(serial.readAll());
    }

private:
    QSerialPort serial;

};

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

    SerialPortThread thread;
    QObject::connect(&thread, &SerialPortThread::newDataReceived, [](const QByteArray &data) {
        qDebug() << "Received data:" << data;
    });
    thread.start();

    return a.exec();
}

SerialPortThread类中,我们继承了QThread并重写了run()函数,在这个函数中进行串口的打开、循环读取数据,并通过信号将新数据发送出去。主线程中创建了一个SerialPortThread实例,并连接了该实例的newDataReceived()信号,以接收新数据。可以根据需要在信号槽中处理数据或者在主线程中直接处理。

请注意,在使用Qt时,建议使用Qt的事件循环机制来处理串口数据和其他异步操作,而不是直接使用裸线程。本示例仅提供基本的演示,具体应用场景可能需要更复杂的逻辑和错误处理。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=11797

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?