我有一个带有许多按钮和标签的窗口。问题是当我关闭这些窗口(通过小红叉)时,程序仍在任务管理器中工作(我认为是因为我的代码中有 while 循环)。在以下示例代码中:
void MainWindow::on_pushButton_2_clicked()
{
while (true)
{
//do something.........
}
}
那么我怎么能感觉到小红叉并完成while循环。
在主窗口中重新实现closeEvent(QCloseEvent* event)
( docs ) 以发出信号或手动通知包含循环的对象停止。然后在每个循环调用QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
中,即使线程正在循环中处理,也可以在事件队列中处理事件,然后检查关闭事件信号设置的停止条件。
毫无疑问,有更清洁的解决方案,但没有关于您的程序架构的更具体信息,很难进一步评论。