Sleep() 函数之前的代码不起作用

The code before Sleep() function doesn't work

本文关键字:代码 不起作用 函数 Sleep      更新时间:2023-10-16

我有一个简单的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?");
}
}

使用QTimer::singleShot等待

例如

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?");
  }
}