C++ 函数的作用是';行不通

C++ 函数的作用是';行不通,c++,qt,C++,Qt,我有一个简单的Qt应用程序,它是一个带有文本区域(QTextEdit)的窗口。我将一些文本打印到该区域,按下按钮,根据输入的内容得到响应。下面是负责为某个输入执行的操作的插槽。Block else做得很好。但if有一个问题。如果输入了“请关闭”,我希望它关闭应用程序。在关闭之前,应更改文本区域中的文本。因此,有必要在关闭前延迟。我试着用一个循环来实现它——不起作用,它很难思考,然后在没有显示消息的情况下关闭 如果我使用Sleep(),它也会这样做——等待并关闭,而不更改文本区域。为什么会这样?s

我有一个简单的Qt应用程序,它是一个带有文本区域(QTextEdit)的窗口。我将一些文本打印到该区域,按下按钮,根据输入的内容得到响应。下面是负责为某个输入执行的操作的插槽。Block else做得很好。但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?");
}
}
void布局::text\u slot()
{
QString s=m_texter->toPlainText();
如果(s==“请关闭它”)
{
m_texter->setText(“好的,我的主人!”);

//对于(inti=0;i使用
QTimer::singleShot
等待

e、 g


它无法在睡眠时更新。请参阅,但更新后它将处于睡眠状态,不是吗?请仔细阅读链接的答案。请特别注意
processEvents()
。建议使用processEvents()这是错误的建议。最好不要依赖主线程中的长时间运行的函数,或者将它们拆分或移动到其他线程(永远不要像sleep()doors那样阻塞主线程)我读过这个链接,但没有人真正解释为什么会发生这种情况。到目前为止,我一直认为命令总是按照代码顺序执行的,而现在似乎不是这样。
void Layout::text_slot()
{
  QString s=m_texter->toPlainText();
  if (s=="close it, please")
  {
    m_texter->setText("OK, my Lord!");
    // TODO: disable any user interaction here
    // e.g. disable text input field
    QTimer::singleShot(1000*10, qApp, SLOT(quit()));
  }
  else
  {
    m_texter->setText("What 're you saying?");
  }
}