Как найти активный экземпляр QMainWindow? - PullRequest
1 голос
/ 10 августа 2010

Приветствую всех,

В моем приложении QT у меня есть несколько экземпляров QMainWindow.Я отслеживаю открытые объекты QWindow в объекте Application Context;

В какой-то момент, когда щелкают по элементу Menu, я хочу пройти через все эти QWindows и проверить, какое Window активно, и выполнить некоторые операции.

Пожалуйста, обратитесь к следующему фрагменту кода:

//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 сфокусированное окно?

Любые советына этом?

Заранее спасибо,

Уманга

Ответы [ 2 ]

1 голос
/ 10 августа 2010

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

1 голос
/ 10 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...