Qt在使用QFileDialog后未经我同意激活窗口

Qt在使用QFileDialog后未经我同意激活窗口,qt,Qt,Windows 10上的Qt 5.12.6 MSVC2017 64位,Qt Creator 4.10.1 我有一个从QMainWindow派生的顶级窗口,它有一个QMdiArea 在第一个主窗口中,我使用文件打开对话框在QMD窗口中打开一个新文档,并将其放置在QMD区域中。文件对话框返回后,但在执行打开文档的逻辑之前,我必须调用QApplication::setActiveWindowthis,将其设置回主窗口,因为打开逻辑取决于活动窗口。这种需要似乎与activeWindow变为null有关,

Windows 10上的Qt 5.12.6 MSVC2017 64位,Qt Creator 4.10.1

我有一个从QMainWindow派生的顶级窗口,它有一个QMdiArea

在第一个主窗口中,我使用文件打开对话框在QMD窗口中打开一个新文档,并将其放置在QMD区域中。文件对话框返回后,但在执行打开文档的逻辑之前,我必须调用QApplication::setActiveWindowthis,将其设置回主窗口,因为打开逻辑取决于活动窗口。这种需要似乎与activeWindow变为null有关,无论我如何设置文件对话框的父级

然后,我打开第二个相同的顶层窗口,并使用相同的方法打开另一个文档。 非常奇怪的是,在第二个qmain窗口中的第二个qmainbwindow被激活后,第一个qmain窗口再次被激活,因此各种后续操作会影响第一个窗口中的文档,而不是预期的第二个窗口。如果我在主窗口上来回单击,则激活是正确的

如果我直接从第二个qmain窗口创建一个新文档,而不是使用文件打开对话框,那么它可以正常工作。新的qmdusubwindow被创建并显示在第二个qmain窗口中,而第一个窗口没有被激活。所以这在某种程度上暗示了文件对话框

当我在QMainWindow::activated信号触发的函数上设置断点时,堆栈跟踪显示该信号自动来自Qt内部,而不是直接来自代码中的某个地方

在第二个窗口中使用文件对话框时,如何找出Qt激活第一个窗口的原因?在这一点上,代码太大,无法尝试在这里安装一个最小的示例

-编辑- 我在创建qmbwindow的函数末尾添加了一个一次性QTimer。in创建qmdusubwindow后零毫秒,它将激活第一个QMainWindow,然后激活当前QMainWindow。该解决方案似乎有效,第二个QMain窗口成为活动窗口。但前提是我先选择远离它。黑客使用0毫秒定时器的事实也很有趣。我会张贴最小的例子时,我可以。
谢谢

示例源代码将非常有助于将行为复制为github gist或到回购的链接…示例源代码将非常有助于将行为复制为github gist或到回购的链接。。。