从零开始实现自己的串口调试助手(8)-循环发送

循环发送

准备

创建槽函数

设置QSpinBox的最大值

注意:

// 我们不能在qt的ui线程中延时 ,否则将导致页面刷新问题

//QThread::msleep(ui->spinBox->text().toInt());//设置下次发送时间间隔

定时器实现

关联信号与槽:

//添加自动换行定时器

btnConTimer = new QTimer(this);

connect(btnConTimer,&QTimer::timeout,this,&Widget::btnHandler);

创建控件处理函数

cpp 复制代码
void Widget::btnHandler()
{
    if(btnIndex<buttons.size()) { // 遍历我们创建的多文本控件数组
        QPushButton *btnTmp = buttons[btnIndex];// 读到每一个发送按钮
        emit btnTmp->clicked(); //发出被点击信号 -->跳到对应处理函数-->发送
        btnIndex++;
    }
    else {
        btnIndex  = 0; // 复位
    }

}

实现定时器控制槽函数

cpp 复制代码
void Widget::on_checkBox_send_clicked(bool checked)
{
    if(checked){ // 循环发送被勾选
        ui->spinBox->setEnabled(false);
        btnConTimer->start(ui->spinBox->text().toInt()); // 根据框内的值设置定时器周期
    }
    else{
        ui->spinBox->setEnabled(true);
        btnConTimer->stop();
    }
}

线程实现:

自定义线程类

customthread.h
cpp 复制代码
#ifndef CUSTOMTHREAD_H
#define CUSTOMTHREAD_H

#include <QThread>
#include <QWidget>
#include "widget.h"

class customThread : public QThread
{
    Q_OBJECT // 需要用这个宏里面的信号与槽
public:
    customThread(QWidget *parent);

protected:
   void run() override;

signals:
 void  threadTimeout();


};

#endif // CUSTOMTHREAD_H
customthread.cpp
cpp 复制代码
#include "customthread.h"



customThread::customThread(QWidget *parent):QThread(parent)
{

}

void customThread::run()
{
    while (true) {
    msleep(1000);
    emit threadTimeout();//每隔一秒发一次超时信号
    }

}

线程的信号处理

// 自动换行线程初始化

myThread = new customThread(this);

connect(myThread,&customThread::threadTimeout,this,&Widget::btnHandler);

修改槽函数

cpp 复制代码
void Widget::on_checkBox_send_clicked(bool checked)
{
    if(checked){ // 循环发送被勾选
        ui->spinBox->setEnabled(false);
        myThread->start(); //线程开始
        //btnConTimer->start(ui->spinBox->text().toInt()); // 根据框内的值设置定时器周期
    }
    else{
        ui->spinBox->setEnabled(true);
        myThread->terminate();
        //btnConTimer->stop();
    }
}

实现效果

相关推荐
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮7 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
样例过了就是过了8 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
谭欣辰9 小时前
C++ 排列组合完整指南
开发语言·c++·算法
橙子199110169 小时前
UI 绘制相关
ui
橙子也要努力变强9 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++
盐焗鹌鹑蛋10 小时前
【C++】stack和queue类
c++
Math_teacher_fan10 小时前
Flutter 跨平台开发实战:鸿蒙与音乐律动艺术(六)、Lissajous 利萨茹曲线:频率耦合的轨迹艺术
flutter·ui·数学建模·华为·harmonyos·鸿蒙系统
小短腿的代码世界10 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
郝学胜-神的一滴11 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal