Мне нужно открыть QDialog с помощью QTimer singleShot и ждать флаг состояния. Если эта переменная истинна, то продолжайте.Как использовать QTimer singleShot с QEventLoop в Qt
Это мой код
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 установлен в ИСТИНА
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, это, SLOT (OpenWindow()));
Тогда выход
Enter
Exit.. still continuing
Есть ли у вас какие-либо предложения?
Не используйте какой-либо механизм ожидания в потоке графического интерфейса пользователя. Это управляемое событиями программирование. Воспользуйтесь этим. Используйте сигналы и слоты. – thuga