Qt4 avvio e arresto (pausa)
Domanda
Ok, quindi stasera ho questo problema:
[...]
connect(startButton, SIGNAL(clicked()), this, SLOT(startCalculation()));
connect(stopButton, SIGNAL(clicked()), this, SLOT(stopCalculation()));
[...]
void MainWindow::startCalculation()
{
qDebug() << "hello";
this->startButton->setDisabled(true);
this->stopButton->setEnabled(true);
this->calcStatus = true;
this->calculate();
}
void MainWindow::stopCalculation()
{
this->startButton->setEnabled(true);
this->stopButton->setDisabled(true);
this->calcStatus = false;
}
void MainWindow::calculate()
{
qDebug() << "hello";
while(this->calcStatus)
{
}
}
[...]
Sto cercando di interrompere in qualsiasi momento la procedura calcola (), ma subito dopo l'avvio perdo il controllo e non riesco a premere STOP. Naturalmente nei miei piani futuri calcola () sta per "calcolare" qualcosa di reale (ad es. simulazione del trasferimento di calore).
Grazie per i suggerimenti. P.
Soluzione
Dovresti esaminare il threading. Il calcolo blocca l'interfaccia utente.
Altri suggerimenti
Bene, in "Introduzione ai modelli di progettazione in C ++ con Qt4" dicono quello
" è possibile evitare l'uso di discussioni a favore del Qt Event Loop combinato con QTimer "
ma non l'ho mai provato :)
In realtà, ho appena provato -
add:
QTimer *Timer;
nell'intestazione della classe MainWindow e nel costruttore MainWindow aggiungere:
Timer = new QTimer(this);
quindi cambia calcoli () dalla funzione a un segnale e modifica:
void MainWindow::startCalculation()
{
qDebug() << "hello";
this->startButton->setDisabled(true);
this->stopButton->setEnabled(true);
this->calcStatus = true;
connect(Timer, SIGNAL(timeout()), this, SLOT(calculate()));
Timer->start(0);
}
void MainWindow::stopCalculation()
{
this->startButton->setEnabled(true);
this->stopButton->setDisabled(true);
this->calcStatus = false;
Timer->stop();
Timer->disconnect(this,SLOT(calculate()));
}
Questo dovrebbe funzionare fintanto che non passi alcun argomento in calcoli ().