Поздравления все,
В моем спокойном Приложении у меня есть несколько экземпляров QMainWindow. Я отслеживаю opended QWindow объекты в Объекте контекста Приложения;
В onepoint, когда Пункт меню нажат, я хочу пройти весь этот QWindows и проверку, какое Окно активно, и выполните некоторые операции.
См. следующий фрагмент кода:
//Just a confirmation dialog
QMessageBox msgBox(this->getMainWindow());
msgBox.setText("This will discard existing project");
msgBox.setInformativeText("All Contour data and Volume data will be discarded");
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Ok);
if(msgBox.exec()==QMessageBox::Cancel)
{
return
}
//This is where I check the active window.
QList<MainWindow*> lst= applicationContext.getOpendedWindows();
for(i=0;i<lst.size();i++)
{
MainWindow *win=lst.value(i);
//Check if this is the active window
if(win.isActive()){ // tried (win==QApplication::activeWindow()) also
//DO SOMETHING with 'win' object
}
}
}
Эта проверка хорошо работает, когда я не показываю диалоговое окно подтверждения перед проверкой. Таким образом, когда я комментирую строку 'msgBox.exe ()', я могу найти активное окно из списка.
Отображение QMessageBox изменяет сфокусированное окно?
Какие-либо подсказки относительно этого?
Заранее спасибо,
umanga
Если у вас несколько главных окон, я думаю, у вас также есть несколько меню? Если это так, я бы связал слот, реагирующий на действие меню, с главным окном, либо сделал его слотом основного окна, либо слотом объекта, который знает соответствующее главное окно.
Вы также можете идентифицировать активное окно перед окном сообщения, как предлагает Грег, но я бы тоже не считал это оптимальным.
Самое простое решение вашей проблемы, которое я могу придумать, - это запустить проверку активного окна до того, как вы покажете окно сообщения.
И да, QMessageBox
становится активным окном после вызова msgBox.exec ()
.