QT программирование, функция запуска QtConcurrent

У меня есть программа, которая имеет класс MainWindow что унаследовано от QMainWindow, Я хочу запустить определенную функцию в новом потоке.

Так как я не могу унаследовать от QThread так что лучшее решение - это использовать QtConcurrent, Я хранил QtConcurrent привести к QFuture но, как упоминалось в документации QT, результат QtConcurrent не может быть отменено QFuture::cancel,

Я вижу некоторые вопросы, как у меня, но ответы на них, чтобы создать класс, который наследуется от QThread что я не могу Так в чем же решение? Вот мои коды:

mainwindow.h:

using namespace  std;

class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    ...


private:
    Ui::MainWindow *ui;
    ...
    QFuture<void> future;
    QFutureWatcher< void > futureWatcher;
    QPushButton *stop_pushButton_=new QPushButton;

private slots:
    ...
    void on_graph_pushButton_clicked();
    void generateGraph();
    void stopPushButtonClicked();
    };

mainwindow.cpp:

void MainWindow::stopPushButtonClicked()
{
    futureWatcher.setFuture(future);
    futureWatcher.cancel();
    futureWatcher.waitForFinished();
}

   ...
void MainWindow::on_graph_pushButton_clicked()
{
    loadingOn();
    future = QtConcurrent::run(this,&MainWindow::generateGraph);
}

void MainWindow::generateGraph()
{
    InsertLogs::getInstance()->printStatus(USER_GENERATE_GRAPH);
    GenGraph* gr=new GenGraph;
    connect(this,&MainWindow::loadingOffSignal,this,&MainWindow::loadingOff);
    graphType_=gr->generateGraph(persons_comboBox_->currentText(),
                      ui->graphResource1_comboBox->currentText(),
                      ui->graphResource2_comboBox->currentText(),
                      ui->graphType_comboBox->currentText());

    InsertLogs::getInstance()->printSuccess(SYSTEM_GENERATE_GRAPH);

    emit loadingOffSignal();
}

Когда я нажимаю на graph_pushButton, generatedGraph вызывается в новой теме, но когда я нажимаю на stop_pushButton future не останавливается и generatedGraph Функция выполняется полностью.

0 ответов

Другие вопросы по тегам