• C++ QT QSerialPort基操


    以下是使用QSerialPort的基本步骤:
    
    1. 引入QSerialPort头文件
    #include 
    
    2. 创建QSerialPort对象
    QSerialPort serialPort;
    
     3. 设置串口参数
    serialPort.setPortName("COM1"); // 设置串口名称
    serialPort.setBaudRate(QSerialPort::Baud115200); // 设置波特率
    serialPort.setDataBits(QSerialPort::Data8); // 设置数据位
    serialPort.setParity(QSerialPort::NoParity); // 设置校验位
    serialPort.setStopBits(QSerialPort::OneStop); // 设置停止位
    serialPort.setFlowControl(QSerialPort::NoFlowControl); // 设置流控制
     
    4. 打开串口
    serialPort.open(QIODevice::ReadWrite);
     
    5. 发送数据
    serialPort.write("Hello World");
     
    6. 接收数据
    connect(&serialPort, &QSerialPort::readyRead, this, &MyClass::readData);
    void MyClass::readData()
    {
        QByteArray data = serialPort.readAll();
        // 处理接收到的数据
    }
     
    7. 关闭串口
    serialPort.close();
     
    注意:在使用QSerialPort时,需要在.pro文件中添加以下配置:
    QT += serialport
    

    除了基本用法,QSerialPort还提供了一些高级用法,如下:

    1. 设置超时时间

    serialPort.setTimeout(1000); // 设置超时时间为1秒
     

    2. 获取可用串口列表
    QList ports = QSerialPortInfo::availablePorts();
    foreach (const QSerialPortInfo &info, ports) {
        qDebug() << "Name: " << info.portName();
        qDebug() << "Description: " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        qDebug() << "System Location: " << info.systemLocation();
    }
     

    3. 发送二进制数据

     
    QByteArray data;
    // 填充二进制数据
    serialPort.write(data);
     

    4. 使用信号槽处理错误

     
    connect(&serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));

    void MyClass::handleError(QSerialPort::SerialPortError error)
    {
        if (error == QSerialPort::ResourceError) {
            QMessageBox::critical(this, "Error", "Serial port error: " + serialPort.errorString());
            serialPort.close();
        }
    }
     

    5. 设置自定义的流控制

     
    serialPort.setDataTerminalReady(true); // 设置DTR为高电平
    serialPort.setRequestToSend(true); // 设置RTS为高电平
     

    6. 使用自定义的数据解析器

     
    class MyParser : public QObject
    {
        Q_OBJECT
    public:
        MyParser(QObject *parent = nullptr) : QObject(parent) {}

    public slots:
        void parseData(const QByteArray &data) {
            // 解析数据
        }
    };

    MyParser parser;
    connect(&serialPort, &QSerialPort::readyRead, &parser, &MyParser::parseData);
     

    这些高级用法可以帮助我们更好地使用QSerialPort,提高串口通信的可靠性和灵活性。

  • 相关阅读:
    (173)FPGA约束:单周期时序分析或默认时序分析
    【RabbitMQ实战】07 3分钟部署一个RabbitMQ集群
    Java基础知识——继承
    Perl基本数组排序方法介绍
    [附源码]计算机毕业设计springboot教学辅助系统
    Arthas教程
    机器学习——决策树与随机森林
    数据结构与算法知识点总结(1)数组与链表
    【动手学深度学习----注意力机制笔记】
    SpringBoot使用随机端口启动
  • 原文地址:https://blog.csdn.net/Hello___Sunshine/article/details/130865435