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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top