无限期重复,直到在 QT 中使用 C++ 在另一个 window 中按下一个按钮

Repeat indefinitely until a button is pressed in another window with C++ in QT

我正在使用 qtcreator 用 C++ 编写一个程序,其中我必须无限期地执行一些操作,直到用户在另一个 window 中想要通过按下按钮来停止它。我遇到的问题是,当我 运行 代码时,新的 window 是空白的,程序进入“无响应”模式,即使循环仍在执行。 你能告诉我如何解决这个问题吗?

void MainWindow::ejecutarModoDemo()
{

    this->md->show();
    this->md->setIniciar();
    //when pushbutton is clicked in the md window, it change to true
    while(!this->md->getTerminar()){
        srand(time(NULL));
        girarPlato(8 + rand()%8);
        QThread::msleep(5000);
        tragarBola();
        while(obtenerSTA()!=1){
            QThread::msleep(1000);
        }
        QThread::msleep(2000);
        girarPlato(20 + rand()%10);
        lanzarBola(900 + rand()%600);
        mostrarGanador();
    }
    detenerMotor();
    this->md->hide();

}

QThread::msleep休眠一段时间,就是所谓的“忙等”。 为了使 GUI 具有响应性,它必须能够处理事件(绘制事件等)。在 Qt 中,您可以通过两种方式执行此操作:

  • 通过隐式调用 QApplication::exec()(在内部 运行 为您提供 事件循环 ),或者
  • 通过显式调用 QCoreApplication::processEvents()

通常,需要一段时间的计算应该 运行 在单独的后台线程中,而不是在 GUI 线程中。对于“快速修复”,您可能会在计算步骤之间使用 QCoreApplication::processEvents() ;但是您需要确保计算的单个步骤非常短;假设少于 100 毫秒。

在 Qt 中对按下按钮的反应通常发生在 signal-slot mechanism