【发布时间】:2013-08-01 15:51:44
【问题描述】:
我将我的问题简化为必要的,所以不要介意这没有任何用处,如此处所示。
我有我的MainWindow,它是一个QMainWindow,里面有一个QPushButton,我将该按钮的clicked() 信号连接到QMainWindow 的以下插槽:
void MainWindow::followingSlot()
{
OpenFileDialog(this);
}
OpenFileDialog 是一个免费函数:
void OpenFileDialog(QWidget * inParent)
{
QFileDialog dialog(inParent, "caption");
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setWindowModality(Qt::WindowModal);
dialog.exec();
}
一切正常,直到我有 2 个或更多 MainWindows 在玩。然后,在QFileDialog::exec() 调用结束时,当前MainWindow 在“焦点堆栈”中被推回一个位置,第二个MainWindow 被激活并跳转到前台。我希望前面处于活动状态的窗口保持活动状态并位于前面。
我当然可以使OpenFileDialog 适应以下内容:
void OpenFileDialog(QWidget * inParent)
{
QFileDialog dialog(inParent, "caption");
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setWindowModality(Qt::WindowModal);
dialog.exec();
inParent->raise();
inParent->activateWindow();
}
这使我的MainWindow 回到了前面,但您可以看到窗口短暂地切换位置。
我通过 Google、QtCentre 或 SO 没有发现类似的问题。有没有办法阻止这种行为并将注意力集中在有焦点的MainWindow 上?
我在 Mac 上使用 Qt 4.8。
编辑:
我发现不是当前的MainWindow 被推回,而是堆栈中的第二个MainWindow 被拉到前面。如果我从左栈开始,我会以右栈结束(顶部在前面,底部在后面):
current MainWindow other MainWindow raise() current MainWindow
other application -> current MainWindow ------> other MainWindow
other MainWindow other application other application
【问题讨论】:
标签: c++ qt qfiledialog