提问者:小点点

如何在QThread中每5秒运行一个循环


我有四个UI项:

>

  • QPushButton,命名为PushTurnon,调用一个名为on_PushTurnon_Clicked()公共插槽,当QPushButton被单击时,获取一些值,执行一些函数,并运行一些if的

    QPushButton,命名为PushTurnoff,它改变了一个名为TurnoffVar的变量的值,当这个变量变为“1”时,她打破了我们将在第一个按钮上一起创建的循环。

    QPushButton,命名为QPushButton_3,它不执行任何操作,但将根据if的启用或禁用。

    QPushButton,名为PushBusy,当单击de变量Busy时,如果等于“0”则变为“1”,如果等于“1”则变为“0”。

    其思想是,当单击Pushturnon时,在Qthread上启动循环,当单击Pushturnoff时,在Qthread中停止循环,如果Busy等于“1”,则不运行任何循环或Qthread

    主要问题是:如何创建这个Qthread,以及如何实现每5秒运行一次的循环类型?

    MainPrograma.cpp代码

    #include "mainprograma.h"
    #include "ui_mainprograma.h"
    
    MainPrograma::MainPrograma(QWidget *parent) :
        QMainWindow(parent),
        uimain(new Ui::MainPrograma)
    {
        uimain->setupUi(this);
    }
    
    MainPrograma::~MainPrograma()
    {
        delete uimain;
    }
    
    void MainPrograma::on_pushBusy_clicked()
    {
        if(Busy==0){
            Busy=1;
        }
        if(Busy==1){
            Busy=0;
        }
    }
    
    void MainPrograma::on_pushTurnOn_clicked()
    {
        QPushButton *ThirdButton = uimain->QPushButton_3;
        Nmb2 = 2
        Nmb4 = 4;
    
        if(Busy==1){
            ThirdButton->setEnabled(false);
        }
        if(Busy==0){ 
            StartFunction(Nmb2, Nmb4);
            if(TurnOffVar==1){
                //stop loop
            }
            if(X==1){
                ThirdButton->setEnabled(false);     
            }
            if(X==0){
                ThirdButton->setEnabled(true);
            }
        }
    }
    
    void MainPrograma::on_pushTurnOff_clicked()
    {
        TurnOffVar = 1;
    }
    
    

    MainPrograma.h代码:

    #ifndef MAINPROGRAMA_H
    #define MAINPROGRAMA_H
    
    #include <QMainWindow>
    #include <QThread> //How to use??? I can't understand...
    #include <QTimer> //How to use??? I can't understand...
    #include <QDebug>
    
    namespace Ui {
    class MainPrograma;
    }
    
    class MainPrograma : public QMainWindow
    {
        Q_OBJECT
    
    public:
        StartFunction(int Nmb2, int Nmb4) {
            qDebug()<<"result:"<<Nmb2+Nmb4;
        }
    
    private slots:
        void on_pushTurnOn_clicked();
    
        void on_pushTurnOff_clicked();
    
        void on_pushButton_3_clicked();
    
        void on_pushBusy_clicked();
    
    private:
        int Nmb2;
        int Nmb4;
        int TurnOffVar;
        int Busy = 0;
    
    };
    
    #endif // MAINPROGRAMA_H
    

    UI项:四个QPushButtons:

    >

  • Pushturnon

    PushTurnoff

    PushButton_3

    PushBusy

    注意:该项目是来自Qt 5.9.9的Windows应用程序,在系统Windows7中。


  • 共1个答案

    匿名用户

    我有这个代码:

    checkTimer = new QTimer(this);
    connect( checkTimer, SIGNAL(timeout()), this, SLOT(checkTimerFired()) );
    

    我的“Stop Running”按钮将programCreated设置为false,checkTimerFired以以下内容开始

    if (!programCreated) {
        checkTimer->stop();
        return;
    }
    

    这应该是您需要的Qt特定的东西。剩下的就是简单的C++了。