最近被串口通信折腾了。网上教程老的例子我试了都没有实现效果。测试代码如下:
.pro 加入一句
QT += serialport
.h如下
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QtSerialPort/QSerialPort>//串口通信需要用到的#include <QtSerialPort/QSerialPortInfo>#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_pushButton_clicked();void readMyCom(); //声明读串口槽函数private:
Ui::MainWindow *ui;QSerialPort *my_serialport; //声明对象QByteArray requestData;};#endif // MAINWINDOW_H
mainwindow.cpp如下
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>#include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);}MainWindow::~MainWindow(){delete ui;}void MainWindow::readMyCom()//读串口函数{qDebug() << QStringLiteral("检查有没有执行readMyCom");requestData = my_serialport->readAll();//读if(requestData.toHex().isNull()){
qDebug() << QStringLiteral("空!");}
else{ qDebug() << QStringLiteral("非空!");ui->label->setText(requestData);}
requestData.clear();}void MainWindow::on_pushButton_clicked()//点击按钮的槽,点击后会执行{my_serialport= new QSerialPort();my_serialport->setPortName("COM4");//需要自己手动更改。当然也可以从界面选择my_serialport->open(QIODevice::ReadWrite);my_serialport->setBaudRate(QSerialPort::Baud9600);//波特率等参数设置my_serialport->setDataBits(QSerialPort::Data8);my_serialport->setParity(QSerialPort::NoParity);my_serialport->setStopBits(QSerialPort::OneStop);my_serialport->setFlowControl(QSerialPort::NoFlowControl);if(my_serialport->isOpen())//判断是否成功开启{ qDebug("YYY..");}//成功else{ qDebug("NNN..");}//槽函数readMyCom()必须在.h文件中申明。下面一句表示每次有数据接收就触发readMyCom,执行读串口函数。有时候也可以用time来定时触发
connect(my_serialport,SIGNAL(readyRead()),this,SLOT(readMyCom()));}
最后qmake就好了。qmake还不太懂。好了我要去抄实习报告了……