我需要使用QTimer singleShot打开QDialog并等待状态标志。如果此变量为true,则继续。
这是我的代码
StatusFlag = FALSE;
void MainWindow::OpenWindow()
{
qDebug("OpenWindow");
NewGUI *gui=new NewGUI();
gui->setModal(true);
gui->exec();
}
void MainWindow::mWait(ulong milliSeconds)
{
QEventLoop loop;
QTimer::singleShot(milliSeconds, &loop, SLOT(quit()));
loop.exec();
}
在NewGUI构造函数中,StatusFlag设置为TRUE
QTimer::singleShot(0, this, SLOT(OpenWindow()));
while(StatusFlag == FALSE)
{
//Wait until StatusFlag is TRUE.
qDebug("Enter");
mWait(1);
qDebug("Exit");
}
if(StatusFlag == TRUE)
{
//Do something
qDebug("Do something");
}
当前输出
Enter
OpenWindow
预期输出
Enter
Exit
OpenWindow
Do something
如果我评论该行
QTimer :: singleShot(0,this,SLOT(OpenWindow()));
然后输出
Enter
Exit.. still continuing
你有什么建议吗?
答案 0 :(得分:0)
在您的代码中,gui->exec();
启动一个新的本地事件循环,因此您永远不会离开OpenWindow()
。因此,在关闭对话框之前,您的while循环将在mWait(1);
中阻止。
您可以在NewGUI构造函数中发出一个可以连接MainWindow插槽的信号,而不是设置一个标志。你可以在这个插槽中做任何你需要做的工作。