在qt中使用QThread实现启动/停止/暂停

在qt中使用QThread实现启动/停止/暂停,qt,qthread,Qt,Qthread,我是新来的。我有一个使用QThreads执行阶乘计算的示例,使用gui我应该能够启动/停止/暂停计算。我可以通过定义run方法中的逻辑来启动应用程序,如下所示 #ifndef FACTORIALCALCULATOR_H #define FACTORIALCALCULATOR_H #include <QThread> class FactorialCalculator : public QThread { public: FactorialCalculator();

我是新来的。我有一个使用QThreads执行阶乘计算的示例,使用gui我应该能够启动/停止/暂停计算。我可以通过定义run方法中的逻辑来启动应用程序,如下所示

#ifndef FACTORIALCALCULATOR_H
#define FACTORIALCALCULATOR_H

#include <QThread>

class FactorialCalculator : public QThread
{
public:
    FactorialCalculator();
    int inputNumber;
    long resultFactorial;

private:
    virtual void run();
    long calculateFactorial(int input);

};

#endif // FACTORIALCALCULATOR_H


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "factorialcalculator.h";
#include "erathosthenesprimenumbercalculator.h";

FactorialCalculator factorialCalculator;
bool isSuspend = false;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    factorialCalculator.inputNumber = ui->lineEditFactorial->text().toInt();
    ui->resultFactorial->setText(QString(" %1 ").arg(factorialCalculator.resultFactorial));

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_startFactorial_clicked()
{

    factorialCalculator.inputNumber = ui->lineEditFactorial->text().toInt();
    factorialCalculator.start();
    ui->resultFactorial->setText(QString(" %1 ").arg(factorialCalculator.resultFactorial));


}


    #include "factorialcalculator.h"
#include <iostream>
#include <QDebug>


bool isRunning =false;

FactorialCalculator::FactorialCalculator()
{

}

void FactorialCalculator::run()
{

//    calculateFactorial(inputNumber);
    qDebug() << resultFactorial;
//   FactorialCalculator().sleep(2000);
    
    
}

long FactorialCalculator::calculateFactorial(int input)
{
    int n = input;
        unsigned long long factorial = 1;

//        qDebug() << "Enter a positive integer: ";
//        cin >> n;

        if (n < 0)
            qDebug() << "Error! Factorial of a negative number doesn't exist.";
        else {
            for(int i = 1; i <=n; ++i) {
                factorial *= i;
            }
            qDebug() << "Factorial of " << n << " = " << factorial;
        }
        FactorialCalculator().sleep(2000);
        resultFactorial = factorial;
        return factorial;
}
    
#ifndef因子计算器
#定义因子计算器
#包括
类factoriacalculator:publicqthread
{
公众:
因子计算器();
输入整数;
长效工厂;
私人:
虚空运行();
长计算系数(整数输入);
};
#endif//factoriacalculator\u H
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“factoriacalculator.h”;
#包括“erathosthenesprimenumbercalculator.h”;
因子计算器因子计算器;
bool=false;
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
,ui(新ui::Main窗口)
{
用户界面->设置用户界面(此);
factorialCalculator.inputNumber=ui->lineEditFactorial->text().toInt();
ui->resultFactorial->setText(QString(“%1”).arg(factoriacalculator.resultFactorial));
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::在启动工厂时单击()
{
factorialCalculator.inputNumber=ui->lineEditFactorial->text().toInt();
factoriacalculator.start();
ui->resultFactorial->setText(QString(“%1”).arg(factoriacalculator.resultFactorial));
}
#包括“factoriacalculator.h”
#包括
#包括
bool isRunning=false;
FactorialCalculator::FactorialCalculator()
{
}
void factoriacalculator::run()
{
//计算系数(输入编号);
qDebug()n;
if(n<0)

qDebug()创建
pauseResumeCalculation
slot in
factoriacalculator
class,添加bool成员变量
isRunning
表示计算状态,在slot
pauseResumeCalculation
内切换其值,在
run()内运行计算
作为循环,定期调用
qApp->processEvents()
并检查
isRunning
的值,并根据值执行睡眠或计算。添加slot
stopCalculation
和变量
stopRequested
,检查
run()中的值
循环,如果设置为true,则退出。在主线程对象内创建信号,并将其连接到
暂停SumeCalculation
停止计算

每当我尝试运行上述程序时,我在主窗口中得到的ResultFactory变量为零。cpp?您会得到变量的初始值,因为计算尚未完成然而。若要将结果传递给
main窗口
请将信号添加到
factoriacalculator
连接到
main窗口
中的插槽,并在计算完成后发出信号。请您提供一些示例代码帮助