初次使用QT5串口类QSerialPort
来源:互联网 发布:淘宝人群画像分析工具 编辑:程序博客网 时间:2024/06/04 17:42
因为工作需要,现在正在学习Qt的串口通信。Qt4的话需要使用第三方类,使用起来也非常简单,只需要把对应的文件添加到自己的项目中就可以了,我参考的是Qt论坛上的demo,刘大师和yafei的demo都非常详细,网上都可以下载到。不过,Qt5添加了串口类,使用起来就更方便了。
我这里主要是对串口类的简单使用,实现的功能是以读写方式打开串口,点击发送数据按钮将发送区的数据发送到缓冲区,然后在接收区显示出来,界面如下:(源码可以在这里下载)
这里使用了QSerialPort模块提供的两个类:QSerialPort类和QSerialPortInfo类,QSerialPort类提供了对串口的操作,QSerialPortInfo类提供了对串口信息的获取。下面是主要代码,包含了对串口类的简单使用。
首先,一定要在.pro文件中添加:QT += serialport
串口初始化如下:
/****************************串口初始化*****************************/void MainWindow::initPort(){ //读取串口信息 foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { qDebug()<<"Name:"<<info.portName(); qDebug()<<"Description:"<<info.description(); qDebug()<<"Manufacturer:"<<info.manufacturer(); //这里相当于自动识别串口号之后添加到了cmb,如果要手动选择可以用下面列表的方式添加进去 QSerialPort serial; serial.setPort(info); if(serial.open(QIODevice::ReadWrite)) { //将串口号添加到cmb ui->cmbPortName->addItem(info.portName()); //关闭串口等待人为(打开串口按钮)打开 serial.close(); } } QStringList baudList;//波特率 QStringList parityList;//校验位 QStringList dataBitsList;//数据位 QStringList stopBitsList;//停止位 baudList<<"50"<<"75"<<"100"<<"134"<<"150"<<"200"<<"300" <<"600"<<"1200"<<"1800"<<"2400"<<"4800"<<"9600" <<"14400"<<"19200"<<"38400"<<"56000"<<"57600" <<"76800"<<"115200"<<"128000"<<"256000"; ui->cmbBaudRate->addItems(baudList); ui->cmbBaudRate->setCurrentIndex(12); parityList<<"无"<<"奇"<<"偶"; parityList<<"标志"; parityList<<"空格"; ui->cmbParity->addItems(parityList); ui->cmbParity->setCurrentIndex(0); dataBitsList<<"5"<<"6"<<"7"<<"8"; ui->cmbDataBits->addItems(dataBitsList); ui->cmbDataBits->setCurrentIndex(3); stopBitsList<<"1"; stopBitsList<<"1.5"; stopBitsList<<"2"; ui->cmbStopBits->addItems(stopBitsList); ui->cmbStopBits->setCurrentIndex(0); //设置按钮可以被按下 ui->btnOpen->setCheckable(true);}
这里通过遍历所有串口将我们需要使用的串口添加到了combox中,如果想要手动选择可以将串口名称通过列表的方式添加到combox中,到使用的时候再选择。
串口设置如下:
/****************************串口设置******************************/void MainWindow::on_btnOpen_clicked(){ if(ui->btnOpen->text() == "打开串口") { my_serialport = new QSerialPort(this); //设置串口号 my_serialport->setPortName(ui->cmbPortName->currentText()); //以读写方式打开串口 if(my_serialport->open(QIODevice::ReadWrite)) { //设置波特率 my_serialport->setBaudRate(ui->cmbBaudRate->currentText().toInt()); //设置数据位 my_serialport->setDataBits(QSerialPort::Data8); //设置校验位 my_serialport->setParity(QSerialPort::NoParity); //设置流控制 my_serialport->setFlowControl(QSerialPort::NoFlowControl); //设置停止位 my_serialport->setStopBits(QSerialPort::OneStop); //每秒读一次 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(readComDataSlot())); timer->start(1000); setNonSelectable(); } else { QMessageBox::about(NULL, "提示", "串口没有打开!"); return; } } else { timer->stop(); setSelectable(); my_serialport->close(); }}
这里是对串口的设置,需要先打开串口才能设置串口参数。参数设置好之后就可以通过read()和write()函数进行数据的读写,我这里用的是1秒的定时器来读缓冲区的数据。
数据收发如下:
/****************************数据传输******************************/void MainWindow::readComDataSlot(){ //读取串口数据 QByteArray readComData = my_serialport->readAll(); //将读到的数据显示到数据接收区的te中 if(readComData != NULL) { ui->teReceiveData->append(readComData); } //清除缓冲区 readComData.clear();}void MainWindow::on_btnSend_clicked(){ //获取发送区的数据 QString sendData = ui->teSendData->toPlainText(); QByteArray sendData_2 = sendData.toLatin1(); //写入缓冲区 my_serialport->write(sendData_2);}
0 0
- 初次使用QT5串口类QSerialPort
- 初次使用QT5串口类QSerialPort
- QT5 学习记录 QSerialPort 类实现串口调试工具
- Qt 串口类QSerialPort 使用笔记
- Qt 串口类QSerialPort 使用笔记
- Qt之串口类QSerialPort使用笔记
- Qt 串口类QSerialPort 使用笔记
- Qt 串口类QSerialPort 使用笔记
- Qt 串口类QSerialPort 使用笔记
- Qt5.7 QSerialPort串口使用时readyRead()信号不产生解决方法
- QT 使用串口类出现“undefined reference to QSerialPort::QSerialPort(QObject*)错误
- 关于Qt5 QSerialPort使用内存泄漏问题
- (1)Qt利用QSerialPort使用串口
- 使用QT-QSerialport打不开串口的原因
- 使用QSerialport读取串口数据并处理
- Qt 串口类QSerialPort 学习笔记
- QT5中QSerialPort串口通讯的时候,readyRead()信号不产生的解决方案
- 解决Qt5中的QSerialPort分多次接收串口数据的问题
- 1248 NYOJ 海岛争霸
- docker registry http api v2(原创请注明出处)
- RecycleView嵌套ListView和gridView不显示的问题解决
- 集群部署时ehcache的diskStore的设置
- TCP/IP——TCP建立连接与释放连接
- 初次使用QT5串口类QSerialPort
- CAS 原理
- Linux Shell系列教程之(二)第一个Shell脚本
- C++函数后面加const修饰
- win7下配置FTP服务
- python初学(0)python简介(python初学之路)
- android处理拍照旋转问题及带来的对内存占用的思考
- 电脑还原Mac地址
- Service