【问题标题】:implementation of start/stop/pause using QThread in qt在 qt 中使用 QThread 实现启动/停止/暂停
【发布时间】:2021-05-02 07:06:14
【问题描述】:

我是 qt 的新手。我有一个使用 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;
}
    

但我需要实现暂停和停止功能。我该怎么做,任何伪代码都会有所帮助。

【问题讨论】:

    标签: qt qthread


    【解决方案1】:

    FactorialCalculator类内创建pauseResumeCalculation槽,添加代表计算状态的布尔成员变量isRunning,在槽pauseResumeCalculation内切换其值,在run()内循环运行计算并定期调用qApp-&gt;processEvents()并检查isRunning 的值并根据值进行睡眠或计算。添加槽stopCalculation和变量stopRequested,检查其在run()循环中的值,如果设置为true则退出。在主线程对象中创建信号并将它们连接到pauseResumeCalculationstopCalculation

    【讨论】:

    • 每当我尝试运行上述程序时,我在 mainwindow.cpp 中得到 resultFactorial 变量为零?
    • 你得到了变量的初始值,因为计算还没有完成。要将结果传递给MainWindow,请将信号添加到FactorialCalculator,连接到MainWindow 中的插槽,并在计算完成时发出。
    • 能否请您提供一些示例代码
    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多