串口通信在嵌入式设备开发中非常常用,在Qt5之前,要实现串口通信,需要借助第三方串口封装代码,QT5已经自带了类来完成这项工作。
代码如下:
//1. [代码]在pro文件中添加 //QT += serialport///引入头文件#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>//[代码]初始化 my_serialport->setPortName(ComName); my_serialport->setBaudRate(9600); my_serialport->setDataBits(QSerialPort::Data8); my_serialport->setParity(QSerialPort::NoParity); my_serialport->setStopBits(QSerialPort::OneStop); my_serialport->setFlowControl(QSerialPort::NoFlowControl);
附上一段完整的实例代码:
main.cpp
#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
widget.h widget.cpp
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>#include <QTimer>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();private slots: void on_pushButton_cmopen_clicked(); void updateAA(); void on_pushButton_send_clicked();private: Ui::Widget *ui; QSerialPort *my_serialport; QByteArray requestData; QTimer *timer;};#endif // WIDGET_H
#include "widget.h"#include "ui_widget.h"#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>#include <QDebug>#include <QTimer>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { qDebug() << "Name : " << info.portName(); qDebug() << "Description : " << info.description(); qDebug() << "Manufacturer: " << info.manufacturer(); // Example use QSerialPort QSerialPort serial; serial.setPort(info); if (serial.open(QIODevice::ReadWrite)) { ui->comboBox->addItem(info.portName()); serial.close(); } }}Widget::~Widget(){ delete ui;}void Widget::on_pushButton_cmopen_clicked(){ my_serialport= new QSerialPort(); qDebug()<<ui->comboBox->currentText(); my_serialport->setPortName(ui->comboBox->currentText()); my_serialport->open(QIODevice::ReadWrite); qDebug()<<ui->lineEdit->text().toInt(); my_serialport->setBaudRate(ui->lineEdit->text().toInt()); my_serialport->setDataBits(QSerialPort::Data8); my_serialport->setParity(QSerialPort::NoParity); my_serialport->setStopBits(QSerialPort::OneStop); my_serialport->setFlowControl(QSerialPort::NoFlowControl); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateAA())); timer->start(1000);}void Widget::updateAA(){ requestData = my_serialport->readAll(); if(requestData!= NULL) { ui->textEdit->append(requestData); } requestData.clear();}void Widget::on_pushButton_send_clicked(){ QByteArray TxData = "aaaa"; my_serialport->write(TxData);}
联系客服