Qt4 Starten und Stoppen (pausiert)
Frage
Ok, so dass dieses Problem ich heute Abend mit:
[...]
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)
{
}
}
[...]
Ich versuche, die calculate () Prozedur arretierbar jederzeit zu machen, aber gleich nach dem ich die Kontrolle verlieren und ich kann nicht drücken STOP gestartet. Natürlich in meinen Pläne für die Zukunft zu berechnen () wird auf etwas Reales (zum Beispiel Wärmeübertragungssimulation) „berechnen“.
Vielen Dank für die Anregungen. P.
Lösung
Sie müßten in Einfädeln suchen. Die Berechnung sperrt den ui.
Andere Tipps
Nun, in "Einführung in die Design-Patterns in C ++ mit Qt4" sie sagen, dass
"Es ist möglich, die Verwendung zu vermeiden Themen für die Qt-Ereignisschleife kombiniert mit QTimers "
, aber ich habe nie versucht es:)
Eigentlich habe ich gerade versucht -
add:
QTimer *Timer;
in Mainwindow-Klasse-Header und in Mainwindow-Konstruktor hinzu:
Timer = new QTimer(this);
dann ändern berechnen () aus der Funktion auf ein Signal und ändern:
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()));
}
Dies sollte so lange arbeiten, wie Sie alle Argumente in calculate passiert nicht ().