需要先添加头文件两个
#include <QtSerialPort/QSerialPort>//提供串口功能
#include <QtSerialPort/QSerialPortInfo>//系统串口访问功能
在工程文件.pro里添加QT +=serialport
以下是基本代码
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
setWindowTitle("串口调试助手V1.0");//serial 在Mywidget头文件中
serial=new QSerialPort(this);//指定父对象
ui->pushButton_clear->setEnabled(false);
ui->pushButton_send->setEnabled(false);
ui->pushButton_change->setEnabled(true);
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())//可以不使用
{
serial->setPort(info);
if(serial->open(QIODevice::ReadWrite))
{
ui->comboBox_port->addItem(serial->portName());//添加端口号
serial->close();
}
}//自动搜寻串口号并保存
connect(ui->pushButton_change,&QPushButton::clicked,
[=]()
{
if(true==flag)
{
//打开串口
ui->pushButton_change->setText("关闭串口");
flag=false;
ui->pushButton_clear->setEnabled(true);
ui->pushButton_send->setEnabled(true);
serial->setPortName(ui->comboBox_port->currentText());
serial->open(QIODevice::ReadWrite);
qint32 bar=ui->comboBox_baurd->currentText().toInt();
cout<<bar;
serial->setBaudRate(bar);
//设置数据位
switch(ui->comboBox_databit->currentText().toInt())
{
case 8:
serial->setDataBits(QSerialPort::Data8);
break;
default :
break;
}
//设置校验位
if(ui->comboBox_check->currentText().toUtf8()=="无")
{
serial->setParity(QSerialPort::NoParity);//无校验
}
//停止位
switch(ui->comboBox_stop->currentText().toInt())
{
case 1:
serial->setStopBits(QSerialPort::OneStop);
break;
case 2:
serial->setStopBits(QSerialPort::TwoStop);//
break;
default:
break;
}
connect(serial,&QSerialPort::readyRead,
[=]()
{
cout<<"数据接受中";
QByteArray arry= serial->readAll();
ui->textEdit_reseive->insertPlainText(arry);
});
}else
{
//关闭串口
ui->pushButton_change->setText("打开串口");
flag=true;
serial->close();//关闭
ui->pushButton_clear->setEnabled(false);
ui->pushButton_send->setEnabled(false);
}
});//点击后显示关闭串口
//再次按下时候执行打开或者关闭
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::on_pushButton_clear_clicked()//清除,按键转到槽
{
ui->textEdit_reseive->clear();
}
void MyWidget::on_pushButton_send_clicked()//发送,按键转到槽
{
serial->write(ui->textEdit_send->toPlainText().toUtf8().data());//试试看
cout<<"数据发送中";
}
效果图:
使用USB转TTL,自测效果图: