Qt如何快速的开发一款界面简洁的串口调试助手

标题:Qt如何快速的开发一款界面简洁的串口调试助手,打包可执行程序
文章目录
话不多说,先上截图吧!!!
接下来讲教大家怎么制作一款自己的串口助手,分为以下几个步骤:界面设计串口搜索以及打开串口发送数据(包含进制接收发)接收串口发来的数据设置标题栏的图标设置可执行程序的桌面图标打包可执行程序(可发送给其他好友,无需安装环境) 一、首先创建一个空的项目
二、在Ui界面设置自己的专属界面 可在开始菜单找到Qt文件夹,选择,这是一个可视化的界面,设计界面的话用这个比较舒服,不需要等待编译时间,如果在Qt主界面运行看效果那可太浪费时间了 。设计界面小技巧:把界面分成几块区域,用控件分开,然后再在里面添加控件 。预览界面快捷键:ctrl+r
打开界面如下
三、设计控件的风格
点击所需要设计的控件,在属性界面找到,点击…即可进入快捷设计界面
QPushButton{background-color: rgb(170, 170, 255);color: white;border-radius: 10px;border: 2px groove gray;border-style: outset;}
四、编写我们的代码 在我们的Ui界面,串口配置无需操作,接下来我们来自动获取电脑的串口信息并自动添加到列表里 。
选中查询串口按钮,右击选中转到槽,这里槽函数的功能是,当你点击这个按钮将做什么事情 。
在.pro文件中添加设置
QT+= serialport#加入串口模块
实现代码:

Qt如何快速的开发一款界面简洁的串口调试助手

文章插图
//搜索串口void MainWindow::on_Serach_Button_clicked(){// 清除当前显示的端口号ui->Serial_engine_comboBox->clear();//检索端口号foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){ui->Serial_engine_comboBox->addItem(info.portName());}}
3.打开串口
//打开串口void MainWindow::on_open_Button_clicked(){if(ui->open_Button->text() == QString("OpenPort"))//串口未打开{//设置端口号Serial.setPortName(ui->Serial_engine_comboBox->currentText());//设置波特率Serial.setBaudRate(ui->Speed_comboBox->currentText().toInt());//设置数据位switch (ui->Data_bits_comboBox->currentText().toInt()){case 8: Serial.setDataBits(QSerialPort::Data8); break;case 7: Serial.setDataBits(QSerialPort::Data7); break;case 6: Serial.setDataBits(QSerialPort::Data6); break;case 5: Serial.setDataBits(QSerialPort::Data5); break;default: break;}//设置停止位switch (ui->Stop_bits_comboBox->currentText().toInt()){case 1: Serial.setStopBits(QSerialPort::OneStop);break;case 2: Serial.setStopBits(QSerialPort::TwoStop);break;case 3: Serial.setStopBits(QSerialPort::OneAndHalfStop);break;default:break;}//设置校验方式switch (ui->Parity_comboBox->currentIndex()){case 0: Serial.setParity(QSerialPort::NoParity);break;default:break;}//设置流控制模式Serial.setFlowControl(QSerialPort::NoFlowControl);//打开串口if(Serial.open(QIODevice::ReadWrite)==false){QMessageBox::warning(NULL , "提示", "串口打开失败!");return;}// 使能串口设置控件ui->Serial_engine_comboBox->setEnabled(false);ui->Speed_comboBox->setEnabled(false);ui->Data_bits_comboBox->setEnabled(false);ui->Stop_bits_comboBox->setEnabled(false);ui->Parity_comboBox->setEnabled(false);ui->Flow_control_comboBox->setEnabled(false);ui->Serach_Button->setEnabled(false);//调整串口控制按钮的文字提示ui->open_Button->setText(QString("ClosePort"));}else//串口已经打开{Serial.close();// 使能串口设置控件ui->Serial_engine_comboBox->setEnabled(true);ui->Speed_comboBox->setEnabled(true);ui->Data_bits_comboBox->setEnabled(true);ui->Stop_bits_comboBox->setEnabled(true);ui->Parity_comboBox->setEnabled(true);ui->Flow_control_comboBox->setEnabled(true);ui->Serach_Button->setEnabled(true);//调整串口控制按钮的文字提示ui->open_Button->setText(QString("OpenPort"));}}
4.串口发送
//串口发送void MainWindow::on_Send_Four_pushButton_clicked(){if(Serial.isOpen()==false)//判断串口是否打开{QMessageBox::warning(NULL , "提示", "请打开串口!");return;}//toPlainText() 转换为纯文本格式//toUtf8() 转换为UTF-8 编码QByteArray senddata = http://www.kingceram.com/post/ui->SendEdit_Four->toPlainText().toUtf8();//判断是否有非16进制字符if(ui->hex_radioButton_four->isChecked()==true) //勾选了16进制发送{int cnt = senddata.size();//计算要发送数据的长度char *data = http://www.kingceram.com/post/senddata.data();for(int i=0;i='0' && (data[i]<='9'))continue;else if(data[i]>='a' && (data[i]<='f'))continue;else if(data[i]>='A' && (data[i]<='F'))continue;else if(data[i] == ' ')//是否有空格continue;else{QMessageBox::warning(NULL , "提示", "输入非16进制字符!");return;}}senddata = http://www.kingceram.com/post/senddata.fromHex(senddata);}//勾选了发送新行,意思是在发送数据之后加上一个回车换行符if(ui->New_checkBox_four->isChecked()==true){int cnt = senddata.size();senddata = http://www.kingceram.com/post/senddata.insert(cnt,"\r\n"); }Serial.write(senddata); //通过串口发送数据}
5.串口接收数据
这里需要把串口读取函数定义在 slots:里
private slots:void on_open_Button_clicked();void on_Serach_Button_clicked();void on_Send_Four_pushButton_clicked();void Serial_read();//串口读取void on_Clearn_Button_clicked();
void MainWindow::Serial_read(){//读取串口收到的数据QByteArray buffer = Serial.readAll();//判断是否需要16进制显示if(ui->hex_radioButton_read->isChecked()==true){buffer = buffer.toHex() ;//转换为16进制 例:"1234" -->“31323334”}QString receive = QString(buffer);//在接收窗口显示收到的数据ui->Receive_Edit->insertPlainText(receive);}
并设置它的一个槽函数:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);this->setWindowIcon(QIcon("://images/myico.png")); //设置启动左上角图标ui->Speed_comboBox->setCurrentIndex(5);//波特率默认9600ui->Data_bits_comboBox->setCurrentIndex(3);//数据位默认8ui->Stop_bits_comboBox->setCurrentIndex(0);//停止位默认1ui->Parity_comboBox->setCurrentIndex(0);//校验位默认0ui->Flow_control_comboBox->setCurrentIndex(0);//流控制默认 NoFlowControl//连接槽函数connect(&Serial,&QSerialPort::readyRead,this,&MainWindow::Serial_read);}
6.清屏
//清空接收窗口void MainWindow::on_Clearn_Button_clicked(){ui->Receive_Edit->clear();}
7.其他一些小功能还没完善,比如说计算收到多少个字节,发送了多少个字节,清除接收发送的字节数,而发送这里也只实现了最下面的一个,其他三个没实现,读者可自行实现 。
五、如何设置标题栏图标 右击工程,添加新文件
定义名称
添加资源
代码实现
this->setWindowIcon(QIcon("://images/myico.png")); //设置启动左上角图标
效果图
Qt如何快速的开发一款界面简洁的串口调试助手

文章插图
六、如何制作可执行程序的桌面图标 先看效果图吧,上面的是设置好的,而下面的是自带的
在工程目录下,添加两个文件
第一个是图标:必须是.ico结尾的照片,可在网站上自行转换,这里贴一个转换网站
转换几秒钟的事,转换完把图片保存到工程目录下
第二个是编写.rc后缀的文件,用++打开,复制以下代码,名字是图片的名字
IDI_ICON1 ICONDISCARDABLE "myico.ico"
然后最后一步是在Qt工程中的.pro文件加上一句话,名字也是和文件一样的名字
RC_FILE += myico.rc
运行即可看到图标制作完成 七、如何打包可执行程序
选择编译器
将构建好的可执行程序复制到桌面并创建一个空的文件夹放里面
打开Qt自带的终端
切换刚才复制的可执行程序所在的文件夹,并执行一下代码
cd /d C:\Users\Unicorn\Desktop\new///d:切换盘符所需要添加windeployqt serialport.exe//可执行程序的名字.exe
等待打包
【Qt如何快速的开发一款界面简洁的串口调试助手】打包完成可在刚才新建的文件夹下看到生成的一大堆东西,然后就可以压缩打包发送给其他小伙伴炫耀了,哈哈哈哈