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