Остановить работу qtconcurrent после close



  • После закрытия программы она продолжает работать до окончания цикла, закрыть полностью получается только принудительно иле просто происходит crash

    Пример:

    void Dialog::on_StartBut_clicked()
    {
        connect(&watcher, SIGNAL(finished()), this, SLOT(clearData()), Qt::QueuedConnection);
        QFuture<void> future = QtConcurrent::map(list, &Dialog::test);
        watcher.setFuture(future);
    
    }
    void Dialog::test(QString d) {
        for(int i= 0; i < 10; i++) {
    
            qDebug() << "it: " << d << " proggress: " << i;
            QThread::currentThread()->msleep(2000);
    
        }
    }
    void Dialog::clearData()
    {
    
        if(watcher.isRunning()) {
    	watcher.cancel();
            watcher.deleteLater();
            watcher.disconnect();
        }
    }
    


  • оказалось достаточно в слоте clearData watcher.cancel и в конструкторе убрал this->setAttribute(Qt::WA_DeleteOnClose);


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.