Qt4 iniciar e parar (pausa)
Pergunta
Ok, então eu estou tendo este problema esta noite:
[...]
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)
{
}
}
[...]
Eu estou tentando fazer a calcular () procedimento stoppable qualquer momento, mas logo depois ele é iniciado I perder o controle e eu não posso pressione STOP. É claro que em meus planos futuros calcular () vai "calcular" algo real (por exemplo, simulação de transferência de calor).
Obrigado por sugestões. P.
Solução
Você precisa olhar para threading. O cálculo bloqueia o ui.
Outras dicas
Bem, na "Introdução ao Design Patterns em C ++ com Qt4" eles dizem que
"é possível evitar o uso de tópicos em favor do laço Evento Qt combinado com QTimers "
mas eu nunca tentei:)
Na verdade, eu apenas tentei -
add:
QTimer *Timer;
no cabeçalho de classe MainWindow e em MainWindow construtor add:
Timer = new QTimer(this);
, em seguida, calcule () de função para um sinal e modificar:
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()));
}
Isso deve funcionar, desde que você não passar quaisquer argumentos para calcular ().