#include "widget.h" #include "ui_widget.h" #include //添加串口头文件 #include //提示头文件 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<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); //判断串口是否打开成功,并提示,需要添加头文件 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(); }