Как найти активный экземпляр QMainWindow?

Поздравления все,

В моем спокойном Приложении у меня есть несколько экземпляров 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

1
задан Ashika Umanga Umagiliya 10 August 2010 в 08:22
поделиться

2 ответа

Если у вас несколько главных окон, я думаю, у вас также есть несколько меню? Если это так, я бы связал слот, реагирующий на действие меню, с главным окном, либо сделал его слотом основного окна, либо слотом объекта, который знает соответствующее главное окно.

Вы также можете идентифицировать активное окно перед окном сообщения, как предлагает Грег, но я бы тоже не считал это оптимальным.

1
ответ дан 2 September 2019 в 22:18
поделиться

Самое простое решение вашей проблемы, которое я могу придумать, - это запустить проверку активного окна до того, как вы покажете окно сообщения.

И да, QMessageBox становится активным окном после вызова msgBox.exec () .

1
ответ дан 2 September 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: