You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.1 KiB
111 lines
3.1 KiB
#include "widget.h"
|
|
#include "ui_widget.h"
|
|
#include <QSerialPortInfo>//添加串口头文件
|
|
#include <QMessageBox>//提示头文件
|
|
|
|
|
|
Widget::Widget(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::Widget)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
serialPort = new QSerialPort(this);//创建串口对象
|
|
|
|
//定义串口号
|
|
QStringList serialPortNums;
|
|
|
|
|
|
//获取串口号并显示
|
|
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
|
|
serialPortNums<<info.portName();
|
|
}
|
|
ui->serialPortNum->addItems(serialPortNums);
|
|
|
|
//关联数据接收槽函数
|
|
connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialDataReadReady_Slot()));
|
|
}
|
|
|
|
Widget::~Widget()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
//数据接收槽函数
|
|
void Widget::serialDataReadReady_Slot(){
|
|
QString buff;//暂存数据
|
|
buff = QString(serialPort->readAll());//读取串口的数据
|
|
ui->dataRCV->appendPlainText(buff);//将数据发送到接受区内
|
|
}
|
|
|
|
void Widget::on_btnOpenSerial_clicked()//打开串口-点击信号对应的槽函数
|
|
{
|
|
//声明变量
|
|
QSerialPort::BaudRate baudRate;
|
|
QSerialPort::DataBits dataBits;
|
|
QSerialPort::StopBits stopBits;
|
|
QSerialPort::Parity parity;
|
|
//赋值,初始化
|
|
//波特率
|
|
if(ui->baudRate->currentText() == "4800"){
|
|
baudRate = QSerialPort::Baud4800;
|
|
}else if(ui->baudRate->currentText() == "9600"){
|
|
baudRate = QSerialPort::Baud9600;
|
|
}else if(ui->baudRate->currentText() == "115200"){
|
|
baudRate = QSerialPort::Baud115200;
|
|
}
|
|
//数据位
|
|
if(ui->dataBits->currentText()=="5"){
|
|
dataBits = QSerialPort::Data5;
|
|
}else if(ui->dataBits->currentText()=="6"){
|
|
dataBits = QSerialPort::Data6;
|
|
}else if(ui->dataBits->currentText()=="7"){
|
|
dataBits = QSerialPort::Data7;
|
|
}else if(ui->dataBits->currentText()=="8"){
|
|
dataBits = QSerialPort::Data8;
|
|
}
|
|
//停止位
|
|
if(ui->stopBits->currentText()=="1"){
|
|
stopBits = QSerialPort::OneStop;
|
|
}else if(ui->stopBits->currentText()=="1.5"){
|
|
stopBits = QSerialPort::OneAndHalfStop;
|
|
}else if(ui->stopBits->currentText()=="2"){
|
|
stopBits = QSerialPort::TwoStop;
|
|
}
|
|
//校验位
|
|
if(ui->parity->currentText()=="none"){
|
|
parity = QSerialPort::NoParity;
|
|
}
|
|
|
|
//获取当前选择的串口号
|
|
serialPort->setPortName(ui->serialPortNum->currentText());
|
|
//设置串口参数
|
|
serialPort->setBaudRate(baudRate);
|
|
serialPort->setDataBits(dataBits);
|
|
serialPort->setStopBits(stopBits);
|
|
serialPort->setParity(parity);
|
|
|
|
//判断串口是否打开成功,并提示,需要添加<QMessgaeBox>头文件
|
|
if(serialPort->open(QIODevice::ReadWrite) == true){
|
|
QMessageBox::information(this,"提示","成功");
|
|
}else {
|
|
QMessageBox::critical(this,"提示","失败");
|
|
}
|
|
|
|
}
|
|
|
|
void Widget::on_btnCloseSerial_clicked()//关闭串口
|
|
{
|
|
serialPort->close();
|
|
}
|
|
|
|
|
|
void Widget::on_btnSend_clicked()//数据发送槽函数
|
|
{
|
|
serialPort->write(ui->dataInput->text().toLocal8Bit().data());
|
|
}
|
|
|
|
void Widget::on_btnClear_clicked()//清空槽函数
|
|
{
|
|
ui->dataRCV->clear();
|
|
}
|
|
|