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.

War es hilfreich?

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 ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top