基本信息
源码名称:qt 串口助手源码
源码大小:6.16KB
文件格式:.zip
开发语言:C/C++
更新时间:2020-11-18
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
#include "widget.h" #include "ui_widget.h" #include <QMessageBox> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); textstate_receive = false; textstate_send = false; setWindowTitle("个人串口助手"); serialport = new QSerialPort; find_port(); //查找可用串口 ui->send_button->setEnabled(false); //设置控件不可用 ui->close_port->setEnabled(false); } Widget::~Widget() { delete ui,serialport; } //发送数据 void Widget::on_send_button_clicked() { if(textstate_send == true) //文版模式 { serialport->write(ui->send_text_window->toPlainText().toLatin1()); } if(textstate_send == false) //16进制 { QString str = ui->send_text_window->toPlainText(); int num = str.toInt(); str = str.setNum(num,16); ui->send_text_window->clear(); ui->send_text_window->append(str); serialport->write(ui->send_text_window->toPlainText().toLatin1()); } } //打开串口 void Widget::on_open_port_clicked() { update(); sleep(100); //延时100ms find_port(); //重新查找com //初始化串口 serialport->setPortName(ui->com->currentText()); //设置串口名 if(serialport->open(QIODevice::ReadWrite)) //打开串口成功 { serialport->setBaudRate(ui->baud->currentText().toInt()); //设置波特率 switch(ui->bit->currentIndex()) //设置数据位数 { case 8:serialport->setDataBits(QSerialPort::Data8);break; default: break; } switch(ui->jiaoyan->currentIndex()) //设置奇偶校验 { case 0: serialport->setParity(QSerialPort::NoParity);break; default: break; } switch(ui->stopbit->currentIndex()) //设置停止位 { case 1: serialport->setStopBits(QSerialPort::OneStop);break; case 2: serialport->setStopBits(QSerialPort::TwoStop);break; default: break; } serialport->setFlowControl(QSerialPort::NoFlowControl); //设置流控制 //连接槽函数 QObject::connect(serialport, &QSerialPort::readyRead, this, &Widget::Read_Date); // 设置控件可否使用 ui->send_button->setEnabled(true); ui->close_port->setEnabled(true); ui->open_port->setEnabled(false); } else //打开失败提示 { sleep(100); QMessageBox::information(this,tr("Erro"),tr("Open the failure"),QMessageBox::Ok); } } //关闭串口 void Widget::on_close_port_clicked() { serialport->clear(); //清空缓存区 serialport->close(); //关闭串口 ui->send_button->setEnabled(false); ui->open_port->setEnabled(true); ui->close_port->setEnabled(false); } //窗口显示串口传来的数据 void Widget::Read_Date() { QByteArray buf; buf = serialport->readAll(); if(!buf.isEmpty()) //将数据显示到文本串口 { if(textstate_receive == true) //文本模式 { QString str = ui->Receive_text_window->toPlainText(); str =tr(buf); str = " "; ui->Receive_text_window->clear(); ui->Receive_text_window->append(str); } if(textstate_receive == false) //文本模式 { QString str = ui->Receive_text_window->toPlainText(); // byteArray 转 16进制 QByteArray temp = buf.toHex(); str =tr(temp); str = " "; ui->Receive_text_window->clear(); ui->Receive_text_window->append(str); } } buf.clear(); //清空缓存区 } //查找串口 void Widget::find_port() { //查找可用的串口 foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { QSerialPort serial; serial.setPort(info); //设置串口 if(serial.open(QIODevice::ReadWrite)) { ui->com->addItem(serial.portName()); //显示串口name serial.close(); } } } //延时函数 void Widget::sleep( int msec) { QTime dieTime = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } void Widget::on_clear_button_1_clicked() { ui->send_text_window->clear(); } void Widget::on_clear_button2_clicked() { ui->Receive_text_window->clear(); } //接收框文本模式转换 void Widget::on_receive_modl_clicked() { if(ui->receive_modl->text() == "文本模式") { textstate_receive = true; ui->receive_modl->setText("hex模式"); } else { ui->receive_modl->setText("文本模式"); textstate_receive = false; } } //发送框文本转换 void Widget::on_send_modl_clicked() { if(ui->send_modl->text() == "文本模式") { textstate_send = true; ui->send_modl->setText("hex模式"); } else { ui->send_modl->setText("文本模式"); textstate_send = false; } }