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

阅读: 评论:0

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

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

标题:Qt如何快速的开发一款界面简洁的串口调试助手,打包可执行程序

文章目录

    • 标题:Qt如何快速的开发一款界面简洁的串口调试助手,打包可执行程序
    • 一、首先创建一个空的项目
    • 二、在Ui界面设置自己的专属界面
    • 三、设计控件的风格
    • 四、编写我们的代码
    • 五、如何设置标题栏图标
    • 六、如何制作可执行程序的桌面图标
    • 七、如何打包可执行程序

话不多说,先上截图吧!!!

接下来讲教大家怎么制作一款自己的串口助手,分为以下几个步骤:

  1. 界面设计
  2. 串口搜索以及打开串口
  3. 发送数据(包含进制接收发)
  4. 接收串口发来的数据
  5. 设置标题栏的图标
  6. 设置可执行程序的桌面图标
  7. 打包可执行程序(可发送给其他好友,无需安装环境)

一、首先创建一个空的项目




二、在Ui界面设置自己的专属界面

  1. 可在开始菜单找到Qt文件夹,选择Designer,这是一个可视化的界面,设计界面的话用这个比较舒服,不需要等待编译时间,如果在Qt主界面运行看效果那可太浪费时间了。
  2. 设计界面小技巧:把界面分成几块区域,用widget控件分开,然后再在里面添加控件。
  3. 预览界面快捷键:ctrl+r

    打开界面如下

三、设计控件的风格

点击所需要设计的控件,在属性界面找到styleSheet,点击…即可进入快捷设计界面

QPushButton{background-color: rgb(170, 170, 255);color: white;border-radius: 10px;  border: 2px groove gray;border-style: outset;
}

四、编写我们的代码

  1. 在我们的Ui界面,串口配置无需操作,接下来我们来自动获取电脑的串口信息并自动添加到列表里。
  2. 选中查询串口按钮,右击选中转到槽,这里槽函数的功能是,当你点击这个按钮将做什么事情。
  3. 在.pro文件中添加设置
QT        += serialport  #加入串口模块

实现代码:

//搜索串口
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 = ui->SendEdit_Four->toPlainText().toUtf8();//判断是否有非16进制字符if(ui->hex_radioButton_four->isChecked()==true) //勾选了16进制发送{int cnt = senddata.size();          //计算要发送数据的长度char *data = senddata.data();for(int i=0;i<cnt;i++)//判断是否有非16进制字符{if(data[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 = senddata.fromHex(senddata);}//勾选了发送新行,意思是在发送数据之后加上一个回车换行符if(ui->New_checkBox_four->isChecked()==true){int cnt = senddata.size();senddata = senddata.insert(cnt,"rn"); }Serial.write(senddata); //通过串口发送数据
}

5.串口接收数据
这里需要把串口读取函数定义在private 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 = adAll();//判断是否需要16进制显示if(ui->hex_radioButton_read->isChecked()==true){buffer = Hex() ;//转换为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.其他一些小功能还没完善,比如说计算收到多少个字节,发送了多少个字节,清除接收发送的字节数,而发送这里也只实现了最下面的一个,其他三个没实现,读者可自行实现。

五、如何设置标题栏图标

  1. 右击工程,添加新文件
  2. 定义名称
  3. 添加资源
  4. 代码实现
this->setWindowIcon(QIcon("://images/myico.png")); //设置启动左上角图标
  1. 效果图

六、如何制作可执行程序的桌面图标

  1. 先看效果图吧,上面的是设置好的,而下面的是自带的
  2. 在工程目录下,添加两个文件
    第一个是图标:必须是.ico结尾的照片,可在网站上自行转换,这里贴一个转换网站
    /
    转换几秒钟的事,转换完把图片保存到工程目录下

    第二个是编写.rc后缀的文件,用notepad++打开,复制以下代码,名字是图片的名字
IDI_ICON1 ICON  DISCARDABLE "myico.ico"
  1. 然后最后一步是在Qt工程中的.pro文件加上一句话,名字也是和文件一样的名字
RC_FILE += 
  1. 运行即可看到图标制作完成

七、如何打包可执行程序

  1. 选择编译器

  2. 将构建好的可执行程序复制到桌面并创建一个空的文件夹放里面

  3. 打开Qt自带的终端

  4. 切换刚才复制的可执行程序所在的文件夹,并执行一下代码

cd /d C:UsersUnicornDesktopnew   //   /d:切换盘符所需要添加
           //可执行程序的名字.exe
  1. 等待打包
  2. 打包完成可在刚才新建的文件夹下看到生成的一大堆东西,然后就可以压缩打包发送给其他小伙伴炫耀了,哈哈哈哈

本文发布于:2024-02-02 10:12:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170683993843115.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:串口   简洁   助手   界面   快速
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23