【发布时间】:2016-04-18 21:50:53
【问题描述】:
我有一个简单的 Qt 应用程序 - 一个带有文本区域 (QTextEdit) 的窗口。我在该区域中打印一些文本,按下按钮并根据输入的内容获得响应。这是负责的插槽对于某个输入必须做什么。阻止其他人做得很好。但是if有一个问题。如果输入“请关闭它”,我希望它关闭应用程序。在关闭它之前,应该更改文本区域中的文本。所以在关闭之前需要延迟。我试图用一个循环来实现它 - 不起作用,它会努力思考然后在没有显示消息的情况下关闭。
如果我使用 Sleep(),它会执行相同的操作 - 等待并关闭而不更改文本区域。为什么会这样? setText()命令在Sleep()函数之前,为什么不在sleep之前实现呢?
void Layout::text_slot()
{
QString s=m_texter->toPlainText();
if (s=="close it, please")
{
m_texter->setText("OK, my Lord!");
//for (int i=0;i<10000;i++)
//for (int j=0;j<10000;j++)
Sleep(1000*10);
QApplication::quit();
}
else
{
m_texter->setText("What 're you saying?");
}
}
【问题讨论】:
-
但是更新后它被休眠了,不是吗??
-
更仔细地阅读链接的答案。特别注意
processEvents()。 -
建议使用 processEvents() 是不好的建议。最好不要依赖主线程中长时间运行的函数,要么拆分它们,要么将它们移动到其他线程(永远不要像 sleep() 门那样阻塞主线程)
-
我已经阅读了该链接,但没有人真正解释为什么会发生这种情况。到目前为止,我一直认为命令总是按照它们在代码中的顺序执行,现在看来不是这样。