当前位置: 首页 > news >正文

淘客手机端网站建设微信公众号的h5网站开发

淘客手机端网站建设,微信公众号的h5网站开发,网站后台登录系统是怎么做的,邢台信息港二手房出售1 摘要 本文主要讲述如何使用QT从零开始实现一个串口助手的基本功能#xff0c;功能如标题所示#xff0c;文末附有源码供大家参考。文中若有纰漏#xff0c;烦请读者斧正。 2 环境 QT 5.14.1Window 11 3 功能 串口打开/关闭 启动软件时识别串口号打开按键随串口打开状…1 摘要 本文主要讲述如何使用QT从零开始实现一个串口助手的基本功能功能如标题所示文末附有源码供大家参考。文中若有纰漏烦请读者斧正。 2 环境 QT 5.14.1Window 11 3 功能 串口打开/关闭 启动软件时识别串口号打开按键随串口打开状态而改变文字打开失败弹窗提示 串口发送/接收 字符和十六进制 清除发送/接收 4 创建工程 下载QT安装QT创建工程 5 界面布局 5.1 用到的控件 Buttons Push Button即最常见的按键打开串口、发送、清除接收、清除发送都是用了这个控件Check Box即用于打钩的小方框16进制显示和16进制接收用到了此控件 Input Widgets Combo Box点击有下拉菜单的控件串口、波特率、停止位、数据位、奇偶校验的选择用到此控件Text Edit输入文本框串口的发送内容的编辑用到此控件串口接收内容的显示也用到此控件此时该控件为只读 Display Widgets Label串口、波特率、停止位、数据位、奇偶校验这些文字的显示用到此控件 Layouts Vertical Layout垂直布局在此布局框内的空间按垂直等间距排列Horizontal Layout水平布局在此布局框内的控件按水平等间距排列Form Layout在此布局框内的控件按垂直两列等间距排列 5.2 摆放控件 将控件从左侧拖拽到窗口编辑处 5.3 控件编辑及布局 修改Label/Push Button/Check Box控件的文本内容双击控件即可修改在Combo Box中添加菜单内容双击控件即可添加 串口不加后面通过串口号识别在代码里添加波特率本文只添加9600/19200/38400/57600/115200停止位1/1.5/2数据位5/6/7/8校验位无/奇校验/偶校验 控件布局调整控件位置通过布局菜单对选中的控件进行布局修改控件名按控件的实际用途修改控件名 控件布局 修改控件名 6 添加库及头文件 本文的串口助手基于QT自带的QSerialPort类实现故需要添加该类相关的宏和头文件除此之外本文用到的头文件也在此一并添加。 添加宏serialport 添加头文件 其中QSerialPort即QT自带的串口类QSerialPortInfo用于获取串口号QMessageBox用于实现弹窗提示QDebug用于输出调试信息。 7 打开串口 7.1 槽函数 打开串口这个动作是在按下“打开串口”这个按键后进行的因此必须建立按键跟动作之间的联系在QT中这种联系是通过“信号和槽”这样的机制来实现的简单来说“信号”就是按下按键这个事件可以理解为一个标志“槽”是指对这个事件所做的响应可以理解为一个函数。 从控件转到槽函数此处转到“按下时”的槽函数即此函数是在按键按下时被调用 选择clicked()后QT将在cpp文件中生成槽函数显然函数里的内容是要程序员手写的不是QT生成的 槽函数所调用的子函数applySerialPortConfig此函数实现获取combobox中的输入并设置到串口 槽函数所调用的子函数setEnableSerialPortConfig此函数实现combobox的屏蔽与打开 “打开按键”的槽函数主要做这几件事情 根据当前串口的打开状态选择是要打开串口还是关闭串口 通过自定义成员变量mIsOpen实现 若要打开串口则从combobox中获取配置并打开串口 先通过QComboBox的currentText方法获取当前输入再把输入通过QSerialPort类的setXXX方法进行设置再调open方法 若要关闭串口则调用关闭串口函数 调QSerialPort类的close方法 串口打开失败时弹窗提示 调QMessageBox类的warning方法 串口打开状态改变后修改按键的文本内容 调QPushButton的setText方法 串口打开状态改变后修改combobox的激活状态 调QComboBox的setText方法 注意相关成员变量需先在头文件中定义好 7.2 串口列表的获取 前文中并没有在combobox中写死串口列表是为了动态获取串口列表。本文只在软件打开的时候获取串口列表更完善的做法是在点击combobox后更新后面有时间会实现这个功能只需在构造函数中添加以下代码。 foreach是QT中的一个关键字其作用是对第二个参数中的对象进行遍历把遍历过程中的每个对象依次赋给第一个参数并执行花括号中的内容。在这里就是把可获取的串口列表availablePorts()中的串口逐个将其串口号添加到combobox中。 8 串口发送/接收 8.1 字符的收发 对于发送来说其实现过程如下 给发送按键创建槽函数在槽函数中获取发送文本框中的数据对获取到的数据进类型和格式的转换如需发送数据到串口 代码实现 void MainWindow::on_pushButtonSend_clicked() {if(mIsOpen true) {//mSerialPort.write(ui-textEditSend-toPlainText().toStdString().c_str()); //ENTER键0A即\nmSerialPort.write(ui-textEditSend-toPlainText().replace(\n, \r\n).toStdString().c_str()); //ENTER键0D 0A即\r\n} }对于接收来说由于不存在接收按键其实现跟发送有些许不同但本质还是一样的都是QT中的信号和槽的机制 通过connect方法连接接收完成信号readyRead和自定义槽函数on_serialPort_readyRead函数名字自定义在槽函数中读串口对读到的串口数据进行类型和格式的转换如需把数据显示在接收文本框中 代码实现 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);//此处省略中间内容....//连接接收完成信号readyRead和自定义槽函数on_serialPort_readyReadconnect(mSerialPort, SIGNAL(readyRead()), this, SLOT(on_serialPort_readyRead())); }void MainWindow::on_serialPort_readyRead() {if(mIsOpen true) {QByteArray rxData mSerialPort.readAll();ui-textEditReceive-insertPlainText(rxData); //用append会多一个换行ui-textEditReceive-moveCursor(QTextCursor::End); //调整光标位置到最新接收的尾部避免看不到最新接收的数据} }8.2 十六进制收发 在实现了上面字符的收发基础上再实现十六进制的收发其实不难无非多了显示方式的判断以及相应格式和类型的转换罢了。这些格式和类型的转换通常都有现成的轮子不需要再造轮子这样节省了大量时间。 首先是checkbox控件的槽函数实现无论是接收还是发送的16进制checkbox其实现的都是以下两件事情 根据当前checkbox状态对文本框的数据进行字符和十六进制数之间的格式转换记录当前checkbox状态用于接收和发送函数的格式转换 16进制接收显示checkbox的stateChanged槽函数 void MainWindow::on_checkBoxHexDisplay_stateChanged(int arg1) {if(arg1 Qt::Checked) {QString *strHex new QString;*strHex ui-textEditReceive-toPlainText().replace(\n, \r\n); //QT中ENTER键为\n即0A将其替换为Windows中的\r\n即0D 0Aui-textEditReceive-clear();ui-textEditReceive-insertPlainText(strHex-toUtf8().toHex( ).append( )); //QString转QByteArrayQByteArray中的字符转16进制并追加空格toHex在每个16进制数后加空格append在最后加空格ui-textEditReceive-moveCursor(QTextCursor::End);delete strHex;mHexDisplay true;} else {QString *strChar new QString;*strChar ui-textEditReceive-toPlainText().remove(QRegExp(\\s)); //删除空格空格的正则表达式为\sui-textEditReceive-clear();ui-textEditReceive-insertPlainText(QByteArray::fromHex(strChar-toLatin1())); //toLatin1:按照ASCII编码把String转成ByteArrayfromHex:对ByteArray做16进制解码ui-textEditReceive-moveCursor(QTextCursor::End);delete strChar;mHexDisplay false;} }16进制发送显示checkbox的stateChanged槽函数 void MainWindow::on_checkBoxHexSend_stateChanged(int arg1) {if(arg1 Qt::Checked) {QString *strHex new QString;*strHex ui-textEditSend-toPlainText().replace(\n, \r\n);ui-textEditSend-clear();ui-textEditSend-insertPlainText(strHex-toUtf8().toHex( ).append( ));ui-textEditSend-moveCursor(QTextCursor::End);delete strHex;mHexSend true;} else {QString *strChar new QString;*strChar ui-textEditSend-toPlainText().remove(QRegExp(\\s));ui-textEditSend-clear();ui-textEditSend-insertPlainText(QByteArray::fromHex(strChar-toLatin1()));ui-textEditSend-moveCursor(QTextCursor::End);delete strChar;mHexSend false;} }而收发槽函数中也要相应加入格式转换的逻辑。 接收槽函数 void MainWindow::on_serialPort_readyRead() {if(mIsOpen true) {QByteArray rxData mSerialPort.readAll();if(ui-checkBoxHexDisplay-isChecked()) {ui-textEditReceive-insertPlainText(rxData.toHex( ).append( )); //把ByteArray按16进制编码toHex在每个16进制数后加空格append在最后加空格} else {ui-textEditReceive-insertPlainText(rxData);}ui-textEditReceive-moveCursor(QTextCursor::End); //调整光标位置到最新接收的尾部避免看不到最新接收的数据} }发送槽函数 void MainWindow::on_pushButtonSend_clicked() {if(mIsOpen true) {if(ui-checkBoxHexSend-isChecked()) {QByteArray* arrayTxData new QByteArray;*arrayTxData ui-textEditSend-toPlainText().remove(QRegExp(\\s)).toUtf8();mSerialPort.write(QByteArray::fromHex(*arrayTxData));delete arrayTxData;} else {//mSerialPort.write(ui-textEditSend-toPlainText().replace(\n, \r\n).toStdString().c_str());mSerialPort.write(ui-textEditSend-toPlainText().replace(\n, \r\n).toUtf8()); //QT中ENTER键为\n即0A将其替换为Windows中的\r\n即0D 0A}} }也许有读者会对上述代码中那一连串的成员函数感到疑惑不知其为何意想要知道这些函数的作用最好的办法是查阅QT的帮助文档。 比如要查fromHex这个函数的作用对于QT中的类的搜索也是同理查阅帮助文档和手册是学习QT乃至许多技术的必备技能 9 清除发送/接收 这个非常简单只需在槽函数中调用QTextEdit控件的clear方法即可。 10 后记 QT中的各种控件类都是经过层层继承而来调用某个控件类中的方法不一定是定义在该类里面而是定义在其父类中。这种套娃模式极好地用代码描述了真实世界是面向对象的精髓之一。 如果要实现串口列表的实时更新习惯了面向过程开发的朋友可能第一反应是用定时器去周期更新而在面向对象的世界中有一个方法是把控件的方法给改写在其中加入获取串口列表的逻辑这是两种开发思想差异的一个体现。 本文中的串口助手其实还是有很多不完善之处比如还缺少以下功能 16进制发送模式下发送框的非法字符检测发送接收字节数统计自动发送保存上一次的串口配置… 后续有时间将慢慢补上。 11 源码 懒得传git先放某度云上 链接Serial 提取码hjq5 12 参考 QT帮助文档QT中的foreach关键字QComboBox点击时自动更新列表自动刷新QSerialPortQT弹窗QTextEdit追加纯文本无额外的换行QString、QByteArray、ASCII码、16进制等类型转换和编码转换QT 十六进制字符串与原数据字符串互转QT QString去除空格QT 正则表达式 SZ 2023.9.3
http://www.yutouwan.com/news/344010/

相关文章:

  • 漯河网上商城网站建设上海建设工程咨询公司
  • 青岛app网站开发长沙服务专业的建网站
  • 医院做网站备案需要哪些资料wordpress主题添加设置选项
  • 网站开发好后版权归谁广州seo实战培训
  • 景区网站建设策划网站icp备案号怎么查询
  • 如何查询网站域名备案信息wordpress 第三方应用
  • 护肤品网站建设环境分析建网站哪家好北京
  • 做设计灵感的网站iis部署网站 win7
  • 新科网站建设贵阳网站开发公司
  • 建设网站需要花费临沂网站制作网站
  • 网站页面分析在重庆找做网站的技术人员
  • 做网站找我们如何网络推广自己的产品
  • 建立什么网站可以赚钱合肥的网站建设公司哪家好
  • 广州网站制作十年乐云seo广告平面设计欣赏
  • 福建省建设职业管理中心网站搜索引擎主要包括三个部分
  • 网站设计师培训班安卓应用市场app
  • 泉州网站建设做一个网站的建设流程
  • 杭州市网站seo设计师拥有的设计导航
  • 设计色彩的门户网站模板厦门站长优化工具
  • 婚嫁网站设计网站短片怎么做
  • html网站建设的步骤微信开发公众平台
  • 做菠菜网站多少钱网站建设最基础的是什么
  • 广中路街道网站建设网站开发技巧
  • 快速生成网站程序如何建设招聘网站
  • 邹城建设银行网站it网站建设方案
  • 建德网站超市网站模版
  • 南城区做网站建设网站必须要服务器吗
  • 国外 做励志视频的网站淄博网站建设补贴
  • 郑州的网站建设公司哪家好网站建设 石家庄
  • 深圳市力同科技有限公司长春做网络优化的公司