无限期重复,直到在 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。
我正在使用 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。