如何找到活动的QMainWindow实例?

时间:2010-08-10 08:22:05

标签: c++ qt qt4

问候所有人,

在我的QT应用程序中,我有几个QMainWindow实例。 我跟踪应用程序上下文对象中打开的QWindow对象;

在某一点上,当单击一个菜单项时,我想通过所有这些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

2 个答案:

答案 0 :(得分:1)

我能想到的最简单的解决方案是在显示消息框之前运行活动窗口检查

是的,一旦您拨打QMessageBoxmsgBox.exec()就会成为有效窗口。

答案 1 :(得分:1)

如果您有多个主窗口,我认为您还有多个菜单?如果是这样,我会将菜单操作的插槽与主窗口相关联,或者将它作为主窗口的插槽或者知道相应主窗口的对象的插槽。

你也可以在消息框之前识别活动窗口,就像Greg建议的那样,但我也不认为这是最优的。