循环发送
准备
创建槽函数
设置QSpinBox的最大值
注意:
// 我们不能在qt的ui线程中延时,否则将导致页面刷新问题
//QThread::msleep(ui->spinBox->text().toInt());//设置下次发送时间间隔
定时器实现
关联信号与槽:
//添加自动换行定时器
btnConTimer = new QTimer(this);
connect(btnConTimer,&QTimer::timeout,this,&Widget::btnHandler);
创建控件处理函数
void Widget::btnHandler()
{if(btnIndex<buttons.size()) { // 遍历我们创建的多文本控件数组QPushButton *btnTmp = buttons[btnIndex];// 读到每一个发送按钮emit btnTmp->clicked(); //发出被点击信号 -->跳到对应处理函数-->发送btnIndex++;}else {btnIndex = 0; // 复位}}
实现定时器控制槽函数
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
#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
#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);
修改槽函数
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();}
}