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

贵州毕节网站建设app是干什么用的

贵州毕节网站建设,app是干什么用的,怎么查看网站是否被百度收录,什么网站可以接装修活第81讲 串口调试助手实现自动发送 为这个名叫“定时发送”的QCheckBox编写槽函数。 想要做出定时发送的效果,必须引入QT框架下的毫秒级定时器QTimer,查阅手册了解详情。 在widget.h内添加新的私有成员变量: QTimer *timer; 在widget类的构造…

第81讲 串口调试助手实现自动发送

为这个名叫“定时发送”的QCheckBox编写槽函数。

想要做出定时发送的效果,必须引入QT框架下的毫秒级定时器QTimer,查阅手册了解详情。

在widget.h内添加新的私有成员变量:

    QTimer *timer;

在widget类的构造函数内部进行变量初始化:

    ui->setupUi(this);this->setLayout(ui->gridLayoutGlobal);writeCntGobal=0;readCntGobal=0;serialStatus=false;serialPort = new QSerialPort(this);timer=new QTimer(this);

关联信号与槽函数,信号是timeout超时函数,槽函数是发送文本函数:

    connect(timer,&QTimer::timeout,[=](){on_btnSendContext_clicked();});

先测试一下信号与槽是否成功关联,checkBox槽函数的逻辑是勾选后定时器开起,超时后执行槽函数然后自动重装载,如果没有勾选就关闭定时器:

void Widget::on_checkBoxSendInTime_clicked(bool checked)
{if(checked){timer->start(ui->lineEditTimeeach->text().toInt());}else{timer->stop();}
}

测试结果如下,1S发两个,程序正常跑起来了。

接下来,我们会在串口关闭状态下屏蔽“定时发送”按键与“发送”按键;

打开串口定时发送时,屏蔽发送频率输入框与文本输入框。

setEnabled方法可以屏蔽上述的所有控件,进入一种“不可选中”的状态。其次,对于可以勾选的Check Box,setCheckState方法可以取消勾选状态对控件进行重置。

综上所述:

#include "widget.h"
#include "ui_widget.h"#include <QMessageBox>
#include <QSerialPort>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setLayout(ui->gridLayoutGlobal);writeCntGobal=0;readCntGobal=0;serialStatus=false;serialPort = new QSerialPort(this);timer=new QTimer(this);connect(serialPort,&QSerialPort::readyRead,this,&Widget::on_serialData_readytoRead);connect(timer,&QTimer::timeout,[=](){on_btnSendContext_clicked();});ui->comboBox_baudRate->setCurrentIndex(6);ui->comboBox_dataBit->setCurrentIndex(3);QList <QSerialPortInfo> serialList=QSerialPortInfo::availablePorts();for(QSerialPortInfo serialInfo:serialList){//qDebug()<<serialInfo.portName();ui->comboBox_serialNum->addItem(serialInfo.portName());}ui->btnSendContext->setEnabled(false);ui->checkBoxSendInTime->setEnabled(false);
}Widget::~Widget()
{delete ui;
}void Widget::on_btnCloseOrOpenSerial_clicked()
{if(serialStatus==false){//1.选择端口号serialPort->setPortName(ui->comboBox_serialNum->currentText());//2.配置波特率serialPort->setBaudRate(ui->comboBox_baudRate->currentText().toInt());//3.配置数据位serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_dataBit->currentText().toUInt()));//4.配置校验位/*MARK DOWN :enum Parity {NoParity = 0,EvenParity = 2,OddParity = 3,SpaceParity = 4,MarkParity = 5,UnknownParity = -1};Q_ENUM(Parity)*/switch(ui->comboBox_checkBit->currentIndex()){case 0:serialPort->setParity(QSerialPort::NoParity);break;case 1:serialPort->setParity(QSerialPort::EvenParity);break;case 2:serialPort->setParity(QSerialPort::OddParity);break;case 3:serialPort->setParity(QSerialPort::SpaceParity);break;case 4:serialPort->setParity(QSerialPort::MarkParity);break;default:serialPort->setParity(QSerialPort::UnknownParity);break;}//5.配置停止位serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_stopBit->currentText().toInt()));//6.流控if(ui->comboBox_fileCon->currentText()=="None")serialPort->setFlowControl(QSerialPort::NoFlowControl);//7.打开串口if(serialPort->open(QIODevice::ReadWrite)){qDebug()<<"serial open";serialStatus=true;ui->btnSendContext->setEnabled(true);ui->btnCloseOrOpenSerial->setText("关闭串口 ");ui->comboBox_dataBit->setEnabled(false);ui->comboBox_fileCon->setEnabled(false);ui->comboBox_stopBit->setEnabled(false);ui->comboBox_baudRate->setEnabled(false);ui->comboBox_checkBit->setEnabled(false);ui->comboBox_serialNum->setEnabled(false);ui->checkBoxSendInTime->setEnabled(true);}else{QMessageBox msgBox;msgBox.setWindowTitle("错误");msgBox.setText("此串口已被占用或拔出!");msgBox.exec();}}else{serialStatus=false;ui->btnSendContext->setEnabled(false);serialPort->close();ui->btnCloseOrOpenSerial->setText("打开串口 ");ui->comboBox_dataBit->setEnabled(true);ui->comboBox_fileCon->setEnabled(true);ui->comboBox_stopBit->setEnabled(true);ui->comboBox_baudRate->setEnabled(true);ui->comboBox_checkBit->setEnabled(true);ui->comboBox_serialNum->setEnabled(true);ui->checkBoxSendInTime->setEnabled(false);ui->checkBoxSendInTime->setCheckState(Qt::Unchecked);timer->stop();ui->lineEditTimeeach->setEnabled(true);ui->lineEditSendContext->setEnabled(true);}
}void Widget::on_btnSendContext_clicked()
{int writeCnt=0;const char* sendData=ui->lineEditSendContext->text().toStdString().c_str();writeCnt=serialPort->write(sendData);if(writeCnt==-1){ui->labelSendStatus->setText("Send Error!");}else{writeCntGobal+=writeCnt;qDebug()<<"Send Ok! "<<sendData;ui->labelSendStatus->setText("Send Ok!");ui->labelSendcnt->setNum(writeCntGobal);if(strcmp(sendData,sendBack.toStdString().c_str())!=0){ui->textEditRecord->append(sendData);sendBack=QString(sendData);}}
}void Widget::on_serialData_readytoRead()
{QString revMessage=serialPort->readAll();if(revMessage!=NULL){qDebug()<<"getMessage:"<<revMessage;ui->textEditRev->append(revMessage);readCntGobal+=revMessage.size();ui->labelRevcnt->setNum(readCntGobal);}else{}
}void Widget::on_checkBoxSendInTime_clicked(bool checked)
{if(checked){ui->lineEditTimeeach->setEnabled(false);ui->lineEditSendContext->setEnabled(false);timer->start(ui->lineEditTimeeach->text().toInt());}else{ui->lineEditTimeeach->setEnabled(true);ui->lineEditSendContext->setEnabled(true);timer->stop();}
}

第82讲 如何自我验证新控件

http://www.yayakq.cn/news/20730/

相关文章:

  • 你做我评网站会自动查论文相似度吗企业管理培训课程讲座大全
  • 长春网站建设q479185700棒wordpress数据库破解版
  • wordpress网站图片迁移行业网站分类
  • 揭阳高端品牌网站建设圆梦科技专业网站建设
  • lamp环境做网站百度网络推广怎么收费
  • 荆门建网站费用珠海网站制作外包
  • 扬州商城网站制作手机免费建站app
  • 哪个网站可以做链接域名查询 查询网
  • 网站诊断案例wordpress 产品视频上传
  • 青岛市蓝色经济区建设官方网站廊坊中小企业网站制作
  • 欧美风格外贸网站建设电脑网络公司经营范围
  • 网站建设旗帜条幅竞价托管哪家公司好
  • 华为荣耀手机商城官方网站重庆做商城网站
  • 自动化项目外包网网站换空间不换域名对seo有影响吗
  • 潜力的网站设计制作工人找工作哪个网站好
  • 一个网站开发的假设wordpress推荐文章插件
  • 自己做广告用什么软件湛江seo推广外包
  • 网站仿学校官网入口
  • 网站制作流程和方法湘潭做网站 磐石网络
  • 网站用绝对路径好还是相对路径seo做网站美工的理由
  • 网站开发一次性费用泰安公司网站建设价格查询
  • 网站建设被骗维护费建网站要买服务器吗
  • 网站建设和运营wordpress定时任务原理
  • 温州做微网站设计python做网站原理
  • 手机网站怎么搭建西宁最好网站建设公司哪家好
  • 河南郑州广告公司网站建设网络服务合同范本免费
  • 手机图片网站 模版dedecms企业网站模板
  • 网站建设 系统 排名wap是什么意思歌词
  • 杭州做微信网站软件公司网站建设 计划书
  • 网站架构设计师简历网站内容更新及时