【发布时间】:2015-02-27 04:48:03
【问题描述】:
我需要使用 QTimer singleShot 打开 QDialog 并等待状态标志。如果此变量为真,则继续。
这是我的代码
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
你有什么建议吗?
【问题讨论】:
-
不要在您的 GUI 线程中使用任何类型的等待机制。它是事件驱动的编程。充分利用这一点。使用信号和槽。
标签: qt qdialog qtimer qeventloop