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

沂水网站优化推广中国wordpress用的人少

沂水网站优化推广,中国wordpress用的人少,做网站登录的需求分析,做一个网站美工多少钱前言 上位机的简单编写可以帮我们测试并完善平台#xff0c;QT作为一款跨平台的GUI开发框架#xff0c;提供了非常丰富的常用串口api。本文先从最简单的串口调试助手开始#xff0c;编写平台软件的串口控制界面 工程配置 QT 串口通信基于QT的QSerialPort类#xff0c;先在…前言 上位机的简单编写可以帮我们测试并完善平台QT作为一款跨平台的GUI开发框架提供了非常丰富的常用串口api。本文先从最简单的串口调试助手开始编写平台软件的串口控制界面 工程配置 QT 串口通信基于QT的QSerialPort类先在项目文件pro中添加QT serialport。   避免默认的widget类和ui命名将串口部分的ui命名为ui_serial,类命名为serial 界面设置 在UI界面可以直接搭建我们想要的界面显示方案并自动生成相应代码添加头文件用起来还是非常方便的注意不要和代码里手动添加的混淆就好了   需要配置的可以选择QComboBox添加常用的配置项比如串口号波特率数据校验停止位等   添加led指示灯QLabel可以用来美化界面   点击选中的可以选择QRadioButton用以单选直观的给以感受   收发的界面选择文本框QPlainTextEdit可以多行显示   手动加的短文本框可以用QLineEdit可以单行显示   其余的用最基础的pushbutton就可以了   为了界面不会被放大缩小导致排版混乱可以添加弹簧或者直接写死窗口大小   设计完成后会保存为对应名称比如serial.ui 构造函数里需要将有交互的部分connect起来将界面按键的初始值做设置   我们可以通过继承QSerialPort类也可以直接继承Qwidget类在里面申明Qserialport class serial : public QWidget {Q_OBJECTpublic:explicit serial(QWidget *parent 0);QSerialPort *serialPort;~serial(); private slots:void serialPortReadyRead_Slot();void on_OpenBt_clicked();void on_SendBt_clicked();void on_SaveBt_clicked();void on_ClearBt_clicked();void on_pushButton_clicked();private:QPushButton *m_button;void LED(bool changeColor); //串口连接指示灯void closeEvent(QCloseEvent *event); /***关闭***/void on_comStatus(QString name, bool flag);Ui::serial *ui_serial;};serial::serial(QWidget *parent) :QWidget(parent),ui_serial(new Ui::serial) {ui_serial-setupUi(this);setWindowTitle(串口控制界面-HX);this-setFixedSize(980, 600); // 固定窗口的大小/***************定义接收格式数据按钮********************/QButtonGroup *btnGroupRevnew QButtonGroup(this);btnGroupRev-addButton(ui_serial-ASCII_Receive_Box,0); // 将给定的按钮添加到按钮组btnGroupRev-addButton(ui_serial-HEX_Receive_Box,1);ui_serial-ASCII_Receive_Box-setChecked(true); // 设置默认模式/***************定义发送格式数据按钮********************/QButtonGroup *btnGroupSendnew QButtonGroup(this);btnGroupSend-addButton(ui_serial-ASCII_Send_Box,0); // 将给定的按钮添加到按钮组btnGroupSend-addButton(ui_serial-HEX_Send_Box,1);ui_serial-ASCII_Send_Box-setChecked(true); // 设置默认模式serialPort new QSerialPort(this);connect(serialPort, SIGNAL(readyRead()), this, SLOT(serialPortReadyRead_Slot()));/***************串口热插拔********************/ComChange::getInstance()-setHWND((HWND)this-winId());connect(ComChange::getInstance(), ComChange::comStatus, this, serial::on_comStatus);QStringList strName ComChange::getAvailablePort(); // 获取所有可用串口ui_serial-SerialCb-addItems(strName);/*连接rtsp界面*/ // m_button findChildQPushButton*(pushButton_3); // 查找已有的pushButton3对象 // qDebug()m_button is :m_button; // connect(this, serial::buttonClicked_ctrl_left, this, serial::on_pushButton_3_clicked); // 连接信号与槽//}考虑到热插拔的问题封装getAvailablePort获取当前可用串口 ComChange* ComChange::m_comChange nullptr; ComChange *ComChange::getInstance() {if(m_comChange nullptr){static QMutex mutex; //实例互斥锁。QMutexLocker locker(mutex); //加互斥锁。if(m_comChange nullptr){m_comChange new ComChange();}}return m_comChange;}/*** brief 获取系统中所有可用的串口名* return*/ QStringList ComChange::getAvailablePort() {QStringList strName;foreach(const QSerialPortInfo info, QSerialPortInfo::availablePorts()){QSerialPort port(info);if(port.open(QIODevice::ReadWrite)){strName info.portName();port.close();}}return strName; }串口的热插拔 /*函 数on_comStatus描 述串口热插拔操作。有comchange的h文件、cpp文件和该函数才能支持串口热插拔操作缺一不可。移植请注意。输 入串口名称name, 连接标志flag输 出无 */ void serial::on_comStatus(QString name, bool flag) {if(flag) ui_serial-SerialCb-addItem(name); // 串口插入时自动添加串口名else{ui_serial-SerialCb-removeItem(ui_serial-SerialCb-findText(name)); // 串口拔出时自动移除串口名LED(false); //红色LED 表示关闭串口serialPort-close(); //关闭串口ui_serial-OpenBt-setText(打开串口);}}串口的初始化 在点击打开串口的时候做初始化使用open(QIODevice::ReadWrite)用ReadWrite 的模式尝试打开串口打开成功后设置串口通信的波特率校验方式等配置。打开方式有多种只读r/o、只写w/o或读写r/w模式 直接使用serialPort的相关API   setPortName将当前串口的名字设置为系统可用串口的名字   setBaudRate设置波特率   setDataBits设置数据位   setStopBits设置停止位   setParity设置校验位   close关闭串口   注意串口始终以独占访问方式打开即没有其他进程或线程可以访问已打开的串口。 /*函 数on_OpenBt_clicked描 述打开串口时初始化串口输 入无输 出无 */ void serial::on_OpenBt_clicked() {if(ui_serial-OpenBt-text()打开串口){serialPort-setPortName(ui_serial-SerialCb-currentText()); // 将当前串口的名字设置为系统可用串口的名字qint32 baudrate ui_serial-BaundCb-currentText().toInt(); // 获取期望的波特率serialPort-setBaudRate(baudrate); // 设置波特率//设置数据位switch(ui_serial-DataCb-currentText().toInt()){case 8:serialPort-setDataBits(QSerialPort::Data8); break;case 7:serialPort-setDataBits(QSerialPort::Data7); break;case 6:serialPort-setDataBits(QSerialPort::Data6); break;case 5:serialPort-setDataBits(QSerialPort::Data5); break;}//设置停止位if(ui_serial-StopCb-currentText() 1){serialPort-setStopBits(QSerialPort::OneStop);}else if(ui_serial-StopCb-currentText() 1.5){serialPort-setStopBits(QSerialPort::OneAndHalfStop);}else if(ui_serial-StopCb-currentText() 2){serialPort-setStopBits(QSerialPort::TwoStop);}//设置校验位if(ui_serial-CheckCb-currentText() None){serialPort-setParity(QSerialPort::NoParity);}else if(ui_serial-CheckCb-currentText() Even){serialPort-setParity(QSerialPort::EvenParity);}else if(ui_serial-CheckCb-currentText() Odd){serialPort-setParity(QSerialPort::OddParity);}LED(true); //绿色LED 表示打开串口//串口连接失败提示if(serialPort-open(QIODevice::ReadWrite) false){QMessageBox::critical(this, 提示, 串口连接失败);LED(false); //红色LED 表示关闭串口}ui_serial-OpenBt-setText(关闭串口);}else{LED(false); //红色LED 表示关闭串口serialPort-close(); //关闭串口ui_serial-OpenBt-setText(打开串口);} }串口的收发 根据hex和ASCII在收发时做判断serialPort-readAll();可以接收所有信息serialPort-write(SendTextByte); /可以通过串口将数据发送出去 /*函 数serialPortReadyRead_Slot描 述上位机接收数据输 入无输 出无 */ void serial::serialPortReadyRead_Slot() {QByteArray buf serialPort-readAll(); //从串口读取信息if(ui_serial-ASCII_Receive_Box-isChecked()) //如果设置接收ASCII{ui_serial-ReceiveEdit-insertPlainText(QString::fromLocal8Bit(buf)); // 对串口接收的数据进行编码}else if(ui_serial-HEX_Receive_Box-isChecked()) //如果设置接收HEX{QDataStream out(buf, QIODevice::ReadWrite); //读取数据while(!out.atEnd()) //读取是否完成{qint8 outChar 0;out outChar;QString str QString(%1).arg(outChar0xFF,2,16,QLatin1Char(0)); //转换16进制ui_serial-ReceiveEdit-insertPlainText(str ); //每显示一次后面加一个空格}} }/*函 数on_SendBt_clicked描 述上位机发送数据输 入无输 出无 */ void serial::on_SendBt_clicked() {QString sendstrui_serial-SendEdit-toPlainText(); //获取将要发送数据if(ui_serial-ASCII_Send_Box-isChecked()) // 如果发送ASCII模式{QByteArray SendTextByte sendstr.toLocal8Bit(); //将发送的数据转换格式serialPort-write(SendTextByte); // 通过串口将数据发送出去}else if(ui_serial-HEX_Send_Box-isChecked()) // 如果发送HEX{QByteArray SendTextByte QByteArray::fromHex(sendstr.toLatin1()); // 转换数据格式serialPort-write(SendTextByte); // 通过串口将数据发送出去} } 接收区清除 为了直观的读取接收区数据也需要增加清除当前数据的功能 /*函 数on_ClearBt_clicked描 述清空接收区的数据输 入无输 出无 */ void serial::on_ClearBt_clicked() {ui_serial-ReceiveEdit-clear(); }接收数据的保存 数据量大的时候经常需要保存接收数据的log所以存log的功能也是必不可少的 file.open(QFile::WriteOnly | QFile::Text)可以将文本数据框取出并按行排列 /*函 数on_SaveBt_clicked描 述以TXT格式保存接收区数据输 入无输 出无 */ void serial::on_SaveBt_clicked() {QString textFile QFileDialog::getSaveFileName(this,tr(Save txt),,tr(text (*.txt))); //选择路径//将文本框数据取出并按行排列QFile file(textFile);//文件命名if (!file.open(QFile::WriteOnly | QFile::Text)) //检测文件是否打开{QMessageBox::information(this, Error Message, Please Select a Text File!);return;}QTextStream out(file); //分行写入文件out ui_serial-ReceiveEdit-toPlainText(); }指示灯的使用 为了美化界面直观显示串口是否正常连接可以加个指示灯设置绿色表示开红色表示关 /*函 数closeEvent描 述关闭窗口时若未关闭串口则要关闭串口输 入无输 出无 */ void serial::closeEvent(QCloseEvent *event) {if(serialPort-isOpen()) // 串口处于打开状态{LED(false); //红色LED 表示关闭串口serialPort-close(); // 串口关闭event-accept(); // 界面关闭} }/*函 数LED描 述串口指示灯输 入bool changeColor输 出无 */ void serial::LED(bool changeColor) {if(changeColor true){// 显示绿色ui_serial-LED-setStyleSheet(background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 229, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:9px;);}else{// 显示红色ui_serial-LED-setStyleSheet(background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(255, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:9px;);} }窗口退出 为了避免退出的时候占用串口关闭窗口的时候需要关闭串口 /*函 数closeEvent描 述关闭窗口时若未关闭串口则要关闭串口输 入无输 出无 */ void serial::closeEvent(QCloseEvent *event) {if(serialPort-isOpen()) // 串口处于打开状态{LED(false); //红色LED 表示关闭串口serialPort-close(); // 串口关闭event-accept(); // 界面关闭} }具体功能 剩下的就是根据协议规定点击pushbutton发送相应的内容了
http://www.hkea.cn/news/14323734/

相关文章:

  • 福田企业网站优化方案邯郸品牌策划设计
  • 手机网站做淘宝客班级优化大师下载安装最新版
  • 鞍山网站建设企业微信小商店坑死人
  • 开发网站建设公司wordpress 格子主题
  • 韩国网站建站多种语言网站建设
  • 青岛做网站公司有哪些注册网站填写不了地区
  • 如何后台修改网站联系人wordpress文章与页面
  • 石家庄制作公司网站wordpress 自建页面
  • 简单aspx网站开发个人 可以备案做分类信息网站吗
  • 正能量网站网址大全企业所得税2022年税率
  • 长沙网站开发那家好网站二次开发教程
  • php网站开发主要做什么网站怎么做右上角消息提醒
  • 网站建设优化排名wordpress 编辑主题
  • 湖南备案网站建设方案书互联网技术论文
  • com网站是用什么做的手机网站如何建立
  • 无锡网站建设推广公司网站建设总结体会
  • 网站编辑电子商务网站运营专员网站去掉后缀html
  • 贪玩原始传奇官方网站合肥公司网站搭建服务商
  • 石家庄网站制作网页陕西省安康市建设局网站
  • 梧州网站制作公司公司网站建设费用入账
  • 做app 的模板下载网站有哪些内容建了qq群 如何快速推广
  • 苏州网站模板建站call_user_func_array() wordpress
  • idc自动续费网站源码店铺设计图纸及效果图大全
  • 义乌公司做网站南沙网站建设公司
  • 网站建设销售话女生学计算机难吗
  • iis可以做php网站吗php网站收录
  • 黑龙江 网站开发wordpress音乐播放插件
  • 网站游戏网站怎么做网页制作素材照片和文案
  • php网站建设是什么意思去网站做dnf代练要押金吗
  • 做电商网站需要注意哪些怎么wordpress