QT5串口通信

来源:互联网 发布:连通区域图像分割算法 编辑:程序博客网 时间:2024/05/16 04:54

在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);}
0 0