Qt学习笔记2—串口通信

来源:互联网 发布:js继承 编辑:程序博客网 时间:2024/05/22 05:17

http://blog.csdn.net/qq363692146/article/details/26049355

   //只需要在程序mainwindow.cpp中添加即可   serial.setBaudRate(QSerialPort::Baud115200);

UI界面
这里写图片描述

//串口发送“Hello Zigbee”//mainwindow.cpp#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    //serial.setBaudRate(QSerialPort::Baud115200);    initSerialPort(); //}MainWindow::~MainWindow(){    serial.close(); //关闭串口    delete ui;}void MainWindow::serialRead(){    //声明一个QByteArray类的对象temp ,来获取serial串口所有的读取数据    QByteArray temp = serial.readAll();        QByteArray i,j;  //定义i,j 目的是在两个textEdit分别显示串口数据      i = temp.mid(0,5);  //i,通过temp.mid(0,5)截取从第0位开始,长度为5的数据;即Hello      j = temp.mid(5,7); //ZigBee    ui->textEdit->append(QString(i)); //在ui的textEdit中显示Hello    ui->textEdit_2->append(QString(j));//显示ZigBee}//数据的写入。这是ui界面中pushButton按钮的槽函数,即转到槽,第一个void MainWindow::on_pushButton_clicked(){    if(ui->lineEdit->text().isEmpty()) //如果lineEdit的数据为空,则退出循环,退出该函数            return;    //serial.write 写,toLatin1()可用于转换QString到QByteArray;     serial.write(ui->lineEdit->text().toLatin1());}//void MainWindow::initSerialPort(){    //连接槽    connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead()));    //将availablePorts 可用的端口信息,返回给infos    QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();    //如果没有串口插入,显示无效,并且return,退出函数。    if(infos.isEmpty())    {        ui->comboBox->addItem("无效");        return;    }    //有串口插入则默认显示“串口”    ui->comboBox->addItem("串口");    //foreach(variables ,container),在container里面按顺序遍历,给variables    foreach(QSerialPortInfo info, infos)    {             ui->comboBox->addItem(info.portName());//添加显示串口号      //ui->comboBox->addItem(info.description());    }}//comboBox的槽函数,第三个。每次comboBox 选项的变化都将触发下面的槽函数,做出相应的操作//arg1为该选择的ComboBox选项名称void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1){       serial.setBaudRate(QSerialPort::Baud115200);//设置波特率       QSerialPortInfo info; //定义info       QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();       int i = 0;       foreach (info, infos)       {           if(info.portName() == arg1)               break;  //break 直接退出foreach循环               i++;       }       //我猜想 infos.size() 为0,当有串口插入时,i已经+1了。       if(i != infos.size()){//can find           ui->label->setText("[已开启]");           serial.close();   //先关闭串口           serial.setPort(info);           serial.open(QIODevice::ReadWrite); //读写打开       }       else       {           serial.close();           ui->label->setText("[出错]");       }}
0 0