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

zencart 网站入侵免费静态网页

zencart 网站入侵,免费静态网页,深圳品牌网站设计公司价格,wordpress slug是什么目录 1.QSerialPort类包含了很多有关串口的API 2.实现串口的打开 2.1 方法一#xff1a;通过函数实现 2.2 方法二#xff1a;在ui界面右下角实现 3. 实现定时发送 3.1类的私有成员中添加定时器QTimer timer并去构造函数中初始化它 3.2帮助文档中有QTimer类相关的说明 …目录 1.QSerialPort类包含了很多有关串口的API 2.实现串口的打开 2.1 方法一通过函数实现 2.2 方法二在ui界面右下角实现 3. 实现定时发送 3.1类的私有成员中添加定时器QTimer timer并去构造函数中初始化它 3.2帮助文档中有QTimer类相关的说明 3.3去连接该超时信号与槽函数 4.俩种方式实现时间显示 4.1通过线程实现 4.2 通过定时器实现时间显示 5. 实现发送与接收 6.实现Hex显示——实现每俩个字节加一个空格显示 7.文本框追加内容时注意事项 8.重写QComboBox组件的事件 —— 实现串口号的刷新 9.实现多文本发送 10.循环发送 第一种方法不能通过延时函数处理此方法为错误案例 第二种方法定时器 第三种方法多线程 11.Qt打包程序 1.首先切换为release然后重新构建并且运行 2.拷贝库文件 3.手动拷贝缺失库文件 4.整体进行压缩 1.QSerialPort类包含了很多有关串口的API 静态公有成员中提供了availablePorts() 函数去获取我当前电脑中存在的所有串口存放在容器中元素类型是QSerialPortInfo // 获取当前系统中存在的串口QListQSerialPortInfo serialList QSerialPortInfo::availablePorts();// 使用 qDebug 输出串口信息for (QSerialPortInfo serialinfo : serialList) {qDebug() Port Name: serialinfo.portName() //端口名称 , Description: serialinfo.description() //描述 , Manufacturer: serialinfo.manufacturer() //制造商 , Serial Number: serialinfo.serialNumber(); //序列号ui-comboBox_01-addItem(serialinfo.portName()); //向combox组件中添加端口名称}2.实现串口的打开 想要实现打开串口/关闭串口按键的点击反转需要绑定槽函数中信号是clicked(bool checked),而不是普通的clicked()信号, 并且需要使得该按键状态是可以检测的这里有俩种方法 2.1 方法一通过函数实现 ui-btn_CloseOrOpenSerial-setCheckable(true); 2.2 方法二在ui界面右下角实现 3. 实现定时发送 3.1类的私有成员中添加定时器QTimer timer并去构造函数中初始化它 3.2帮助文档中有QTimer类相关的说明 设置定时器间隔时间 void setInterval(int time);Signals中包含信号检测是否超时 void timeout(); 3.3去连接该超时信号与槽函数 在超时信号的槽函数里面进行数据的发送 4.俩种方式实现时间显示 4.1通过线程实现 curtimeupdate.h #ifndef CURTIMEUPDATE_H #define CURTIMEUPDATE_H#include QDateTime #include QThread #include QObjectclass curTimeUpdate : public QThread {Q_OBJECTpublic:explicit curTimeUpdate(QObject *parent nullptr): QThread(parent){};signals:void updateTime(const QString timeString);protected:// 每间隔1s发送一次时间信号void run() override{while(1){// 获取当前时间QDateTime dataTime QDateTime::currentDateTime();QDate date dataTime.date();int year date.year();int month date.month();int day date.day();QTime time dataTime.time();int hour time.hour();int minute time.minute();int second time.second();// 将时间拼装起来确保月份和日期、小时、分钟、秒钟都是双位数QString currentTime QString(%1-%2-%3 %4:%5:%6).arg(year).arg(month, 2, 10, QChar(0)) // 确保月是两位数.arg(day, 2, 10, QChar(0)) // 确保日是两位数.arg(hour, 2, 10, QChar(0)) // 确保小时是两位数.arg(minute, 2, 10, QChar(0)) // 确保分钟是两位数.arg(second, 2, 10, QChar(0)); // 确保秒钟是两位数//发送信号emit updateTime(currentTime);sleep(1);}}};#endif // CURTIMEUPDATE_Hwidget.cpp // 创建线程更新右下角时间timeUpdater new curTimeUpdate;connect(timeUpdater, curTimeUpdate::updateTime, this, Widget::updateTimeLabel);timeUpdater-start(); // 启动线程void Widget::updateTimeLabel(const QString timeString) {ui-label_nowTime-setText(timeString); // 更新标签显示时间 }4.2 通过定时器实现时间显示 实现逻辑定时器定时1s每当定时器超时会自动发出超时信号检测到该信号时调用槽函数实现当前时间的获取 widget.h中添加以下内容 Private:QTimer* getSysTimeTimer; private slots:void getSysTime();widget.cpp getSysTimeTimer new QTimer(this);getSysTimeTimer-setInterval(1000); //设置定时器2的间隔时间毫秒connect(getSysTimeTimer, QTimer::timeout, this, Widget::getSysTime); //定时器2超时getSysTimeTimer-start(); //启动定时器2// 定时器超时槽函数 void Widget::getSysTime() {// 获取当前时间QDateTime dataTime QDateTime::currentDateTime();QDate date dataTime.date();QTime time dataTime.time();// 提取年、月、日、时、分、秒int year date.year();int month date.month();int day date.day();int hour time.hour();int minute time.minute();int second time.second();// 将时间拼装起来确保月份和日期、小时、分钟、秒钟都是双位数QString currentTime QString(%1-%2-%3 %4:%5:%6).arg(year).arg(month, 2, 10, QChar(0)) // 确保月是两位数.arg(day, 2, 10, QChar(0)) // 确保日是两位数.arg(hour, 2, 10, QChar(0)) // 确保小时是两位数.arg(minute, 2, 10, QChar(0)) // 确保分钟是两位数.arg(second, 2, 10, QChar(0)); // 确保秒钟是两位数// 更新标签显示时间ui-label_nowTime-setText(currentTime); }5. 实现发送与接收 // 发送按键槽函数 void Widget::on_pushButton_19_clicked() {int WriteCnt 0;QString sendData ui-lineEdit_4-text();//Hex发送是否勾选此处为勾选if(ui-checkBox_15-isChecked()){QByteArray tmpArray ui-lineEdit_4-text().toLocal8Bit();//检查字节数是否是偶数if(tmpArray.size() % 2 ! 0){ui-label_5-setText(input error!);return;}//检查是否符合16进制表达for(char c:tmpArray){if(!std::isxdigit(c)){ui-label_5-setText(input error!);return;}}//检查是否添加新行if(ui-checkBox_14-isChecked()){tmpArray tmpArray.append(\\r\\n);}//转化为16进制发送QByteArray tmp QByteArray::fromHex(tmpArray);WriteCnt serialPort-write(tmp);}else{QByteArray data sendData.toLocal8Bit();//检查是否添加新行if(ui-checkBox_14-isChecked()){data data.append(\\r\\n);}WriteCnt serialPort-write(data);}if(WriteCnt -1){ui-label_5-setText(Send false!);}else{ui-label_5-setText(Send Ok!);ui-label_4-setText(Send: QString::number(WriteCntTotal));if(0 ! strcmp(sendBak.toLocal8Bit().constData(), sendData.toLocal8Bit().constData())){ui-textEdit_Record-append(sendData);sendBak sendData;}}}// 接受数据槽函数 void Widget::on_SerialData_reched() {QString revData serialPort-readAll(); // 读取所有可用的数据qDebug() 接受到的新数据为: revData;if(revData ! NULL){//a.是否勾选自动换行if(ui-checkBox_6-isChecked()) revData.append(\\r\\n);//b.更新接受长度RevCntTotal revData.size(); // 统计接受到的字节数ui-label_7-setText(Rev OK!);ui-label_3-setText(Rev: QString::number(RevCntTotal));//c.检查hex显示是否勾选if(ui-checkBox_5-isChecked()){//将新数据转化为HexQByteArray tmp revData.toUtf8();qDebug() tmp: tmp;QByteArray tmpHexString revData.toUtf8().toHex().toUpper();qDebug() 转化后的新数据为 tmpHexString;//获取旧数据QString tmpStringHex ui-textEdit_Rev-toPlainText(); //因为勾选了读出来的就是hex//拼接旧数据与新数据tmpHexString tmpStringHex.toUtf8() tmpHexString;//重新显示在控件上ui-textEdit_Rev-setText(tmpHexString);}else{//接受时间是否勾选此处为未勾选if(ui-checkBox_4-checkState() Qt::Unchecked){ui-textEdit_Rev-insertPlainText(revData);}else{getSysTime();ui-textEdit_Rev-insertPlainText(【currentTime】 revData);}}} }6.实现Hex显示——实现每俩个字节加一个空格显示 在 QString 类中mid() 函数用于提取字符串的子字符串。 QString mid(int position, int length); //position: 指定从哪个位置开始提取子字符串 //length: 指定要提取的字符数。如果这个参数省略则默认提取到字符串的末尾。// Hex显示槽函数 void Widget::on_checkBox_5_clicked(bool checked) {if (checked) {// 获取原始文本 QString \\x01\\x02\\x03QString revDisplay ui-textEdit_Rev-toPlainText();// 转换为 QByteArray \\x01\\x02\\x03QByteArray byteArray revDisplay.toUtf8();// 转换为 QByteArray 010203byteArray byteArray.toHex(); QString lastShow;// 转换为 QString 010203revDisplay QString::fromUtf8(byteArray); for(int i0; irevDisplay.size();i2){lastShow revDisplay.mid(i,2) ;}// 显示添加空格后的16进制内容ui-textEdit_Rev-setText(lastShow);} else {// 获取 Hex 文本QString hexDisplay ui-textEdit_Rev-toPlainText();// 将 Hex 转换回原始字符串//QByteArray \\x01\\x02\\x03QByteArray byteArray QByteArray::fromHex(hexDisplay.toUtf8());//QString \\x01\\x02\\x03QString normalDisplay QString::fromUtf8(byteArray);// 设置文本为正常字符串ui-textEdit_Rev-setText(normalDisplay);} }7.文本框追加内容时注意事项 我们使用的函数是insertPlainText()而不是append()。因为append()函数添加为内容后会自动换行。 8.重写QComboBox组件的事件 —— 实现串口号的刷新 当鼠标按下QComboBox组件时发送reflesh()刷新信号。在widget.cpp中连接该reflesh()信号与槽函数槽函数中实现串口号的检测刷新。 mycombobox.h #ifndef MYCOMBOBOX_H #define MYCOMBOBOX_H#include QComboBoxclass myCombobox : public QComboBox {Q_OBJECT public:myCombobox(QWidget *parent); protected:void mousePressEvent(QMouseEvent *e) override; //鼠标按下事件signals:void reflesh(); //刷新信号 };#endif // MYCOMBOBOX_Hmycombobox.cpp #include mycombobox.h#include QMouseEventmyCombobox::myCombobox(QWidget *parent):QComboBox(parent) {}void myCombobox::mousePressEvent(QMouseEvent *e) {if(e-button() Qt::LeftButton){emit reflesh();}QComboBox::mousePressEvent(e); }9.实现多文本发送 构造函数中先生成按键的名称然后查找系统中是否有该名字的按键有的话指针指向它接着给该按键绑定槽函数 for(int i 1; i 8; i){QString btnName QString(pushButton_%1).arg(i); //生成按键名字QPushButton* btn findChildQPushButton *(btnName); //查找组件中是否有该名字的按键若有将指针指向该按键if(btn){btn-setProperty(buttonId,i); //给该按键添加属性buttons.append(btn); //将该按键添加到容器中connect(btn,SIGNAL(clicked()),this,SLOT(on_command_button_clicked()));//给该按键连接信号与槽函数}QString lineEditName QString(lineEdit_%1).arg(i); //生成输入框名字QLineEdit *lineEdit findChildQLineEdit *(lineEditName); //查找组件中是否有该名字的输入框若有将指针指向该输入框lineEdits.append(lineEdit); //将该输入框添加到容器中QString checkBoxName QString(checkBox_%1).arg(i); //生成checkboBox名字QCheckBox *checkBox findChildQCheckBox *(checkBoxName); //查找组件中是否有该名字的checkboBox若有将指针指向该checkboBoxcheckBoxs.append(checkBox); //将该checkboBox添加到容器中}槽函数中先通过sender()函数获取到发送信号的对象接着获取按键的属性接着根据属性生成对应的名称 void Widget::on_command_button_clicked() {// 通过 sender() 函数获取发出信号的对象在通过 qobject_cast 方法进行类型转换QPushButton *btn qobject_castQPushButton *(sender());if (btn) {// 获取按键的属性 buttonId 的值并转换为整数int num btn-property(buttonId).toInt();// 根据 buttonId 构造与之对应的 QLineEdit 对象的名称QString lineEditName QString(lineEdit_%1).arg(num);QLineEdit *lineEdit findChildQLineEdit *(lineEditName);if (lineEdit) {if (lineEdit-text().isEmpty()) {return; // 如果文本为空直接返回不发送}ui-lineEdit_sendData-setText(lineEdit-text());}// 根据 buttonId 构造与之对应的 QCheckBox 对象的名称QString hexName QString(checkBox_%1).arg(num);QCheckBox *checkBox findChildQCheckBox *(hexName);ui-checkBox_sendHex-setChecked(checkBox ? checkBox-isChecked() : false); // 确保 checkBox 存在后再获取状态// 只有在 lineEdit 有内容的情况下发送数据on_pushButton_send_clicked();} }10.循环发送 第一种方法不能通过延时函数处理此方法为错误案例 //循环发送() void Widget::on_checkBox_cirSend_clicked(bool checked) {if(checked){for(QPushButton *btn : buttons){//当前按键发送点金信号emit btn-clicked();QThread::msleep(ui-spinBox-text().toInt());}} }第二种方法定时器 实现逻辑当勾选循环发送时候调用槽函数去设置定时器的间隔时间并且启动定时器。当定时器超时时候执行槽函数去发送信号。 void Widget::on_checkBox_cirSend_clicked(bool checked) {if(checked){timer3-setInterval(ui-spinBox-text().toInt());timer3-start(); // 启动定时器}else{timer3-stop();} }void Widget::buttons_handler() {if(btnIndex 8){QPushButton *btn buttons[btnIndex];emit btn-click();btnIndex;}else{btnIndex 0;} }第三种方法多线程 缺点没办法与ui组件关联无法通过ui组件获取定时时间。 11.Qt打包程序 11.1.首先切换为release然后重新构建并且运行 11.2.拷贝库文件 首先进入C盘 C 进入你程序的目录下 cd C:\\Users\\mi\\Desktop\\Qt Project\\build-untitled-Desktop_Qt_5_12_9_MinGW_64_bit-Release\\release 执行命令拷贝库到该目录下 D:\\Linux\\Qt\\5.12.9\\mingw73_32\\bin\\windeployqt.exe untitled.exe 11.3.手动拷贝缺失库文件 11.4.整体进行压缩即可 12.整体代码如下 tunnek/QT- (github.com)
http://www.hkea.cn/news/14295841/

相关文章:

  • iis网站域名访问网站做百度推广
  • 网站开发课题研究背景中国建设银行网站晋阳支行
  • 重庆网站seo排名深圳新恒基建设公司
  • 怎样建立一个自己的网站黑龙江采购网
  • 资阳网站推广电商运营和网站运营对比
  • 手机网站模板 phpxampp 做网站
  • 做网站个人怎么赚钱吗一般的网站开发语言用什么
  • 重庆璧山网站建设小广告治理
  • 网站切图怎么收费网站技术解决
  • 企业做网站好吗小米手机的网站架构
  • 在百度做推广需要网站网站建设竞价托管什么意思
  • dw 做网站图片之间的链接知名高端网站设计企业
  • wordpress 4.5.1 漏洞seo优化就业前景
  • 服装网站建设建议wordpress内存使用
  • 怎么做最简单的网站网络营销策划实务
  • 沧县网站建设公司优购物
  • 快站教程我的世界做披风网站
  • 网站开发seo那种漂亮的网站怎么做
  • 网站建设 成功案例政工网站建设方案
  • 济南网站系统优化网站主机在哪里注册呢
  • apicloud下载站内优化seo
  • 网站建设用款Pk10网站建设多少钱
  • 创意二维码制作网站网站建设微商城
  • 校园网站开发设计报告泰和县建设局网站
  • 校园网站设计代码建站快车的应用场景
  • 做网站如何提需求汽车4S店网站建设
  • 网站开发与管理对应的职业及岗位湘潭市网站建设设计
  • 如何做游戏试玩网站比较好的网站建设平台
  • 网页制作如何新建站点实时网站制作
  • 景山网站建设软件技术专业就业方向