C++ QT QSerialPort基操

news/2025/1/15 18:03:58/
以下是使用QSerialPort的基本步骤:1. 引入QSerialPort头文件
#include <QSerialPort>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<QSerialPortInfo> 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,提高串口通信的可靠性和灵活性。


http://www.ppmy.cn/news/98510.html

相关文章

DAY 67 redis高可用之持久化

Redis 高可用 什么是高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供正常服…

C++ Primer第五版_第十九章习题答案(11~20)

文章目录 练习19.11练习19.12练习19.13练习19.14练习19.15练习19.16练习19.17练习19.18练习19.19练习19.20 练习19.11 普通的数据指针和指向数据成员的指针有何区别&#xff1f; 普通的数据指针指向一个对象&#xff1b;类成员指针指向类的非静态成员。当初始化这样一个指针时&…

Unity的UnityStats: 属性详解与实用案例

UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具&#xff0c;它提供了一系列的属性值&#xff0c;可以帮助开发者解游戏的运行情况&#xff0c;从而进行优化。本文将详细介绍 UnityStats 的每个属性值&#xff0c;并提供多个使用例子帮助开发者…

unix环境高级编程 第一章 UNIX基础知识 Go实现代码

ls命令的Go语言实现 package mainimport ("fmt""os" )func main() {if len(os.Args) ! 2 {panic("参数数量不足")}targetPath : os.Args[1]if dirList, err : os.ReadDir(targetPath); err nil {for _, dirInfo : range dirList {fmt.Println(…

六级备考23天|CET-6|翻译技巧4|2013年官方样题|新年|9:45~11:00

目录 1 PRACTICE ANSWER 2 PRACTICE ANSWER 3 ​ PRACTICE ANSWER 4 PRACTICE ANSWER 5 PRACTICE ANSWER 6 ​ PRACTICE ANSWER ​​​​​​​ 答案整合​​​​​​​ 1 PRACTICE Chinese new year is the Chinese most important traditional festival, wh…

R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

sql语句查询数据库字段和表字段数量

》新建数据库:CREATE DATABASE IF NOT EXISTS 数据库名; 示例&#xff1a;:CREATE DATABASE IF NOT EXISTS test_db; 》进入数据库&#xff1a;use 数据库名称&#xff1b; 示例&#xff1a;use test_db; 》数据库中创建表: create table 表名(字段名 字段类型(长度),字段名 字…

Dom解析与Sax解析的区别

1.Dom解析&#xff1a; Dom解析的时候&#xff0c;首先要把整个文件读取完毕&#xff0c;装载到内存中。然后进行解析&#xff0c;在解析的过程中&#xff0c;你可以直接获取某个节点&#xff0c;进行操作&#xff0c;也可以获取根节点然后进行遍历操作&#xff0c;得到所有的…