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

时间:2016-04-18 21:50:53

标签: c++ qt

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

1 个答案:

答案 0 :(得分:2)

使用QTimer::singleShot等待

e.g。

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