.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QDebug>
#include<QSerialPort>
#include<QSerialPortInfo>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void receiveInfo();
void on_pushButton_3_clicked();
private:
Ui::Widget *ui;
QSerialPort* m_serialPort; //串口类
};
#endif // WIDGET_H
.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_serialPort = new QSerialPort();
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QStringList m_serialPortName;
foreach(const QSerialPortInfo &info,
QSerialPortInfo::availablePorts())
{
m_serialPortName << info.portName();
qDebug()<<"serialPortName:"<<info.portName();
}
ui->comboBox->clear();
ui->comboBox->addItems(m_serialPortName);
}
void Widget::on_pushButton_2_clicked()
{
//如果串口已经打开了 先给他关闭了
if(m_serialPort->isOpen())
{
m_serialPort->clear();
m_serialPort->close();
qDebug()<<"串口已关闭!";
ui->pushButton_2->setText("打开串口");
}
else
{
//当前选择的串口名字
m_serialPort->setPortName(ui->comboBox->currentText());
//用ReadWrite 的模式尝试打开串口
if(!m_serialPort->open(QIODevice::ReadWrite))
{
qDebug()<<"打开失败!";
return;
}
qDebug()<<"串口打开成功!";
ui->pushButton_2->setText("关闭串口");
QSerialPort::BaudRate t_BaudRate;
switch(ui->comboBox_2->currentIndex())
{
case 0:
t_BaudRate=QSerialPort::Baud2400;
break;
case 1:
t_BaudRate=QSerialPort::Baud4800;
break;
case 2:
t_BaudRate=QSerialPort::Baud9600;
break;
case 3:
t_BaudRate=QSerialPort::Baud115200;
break;
default:
break;
}
//设置波特率和读写方向
m_serialPort->setBaudRate(t_BaudRate,QSerialPort::AllDirections);
//数据位为8位
m_serialPort->setDataBits(QSerialPort::Data8);
//无流控制
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
//无校验位
m_serialPort->setParity(QSerialPort::NoParity);
//一位停止位
m_serialPort->setStopBits(QSerialPort::OneStop);
connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(receiveInfo()));
}
}
void Widget::receiveInfo()
{
int t_count = 0;
QByteArray info = m_serialPort->readAll();
ui->textEdit->append(info+"\n");
qDebug()<<"\n receive info:"<<info.count()<<info.toHex();
t_count = info.count();
}
void Widget::on_pushButton_3_clicked()
{
QString data = ui->lineEdit->text();
//char *senddata = &data;
m_serialPort->write(data.toLocal8Bit(),data.length());
}