把窗口放到前面 – > raise(),show(),activateWindow()不起作用

在我的Qt应用程序中,我在默认浏览器中打开一个URL。 之后我想把应用程序的主窗口再次带到前面。

我尝试了所有可以find的方法,但都没有成功。 它所做的只是在窗口7的任务栏中闪烁。下面是一个例子:

this->viewer->show(); this->viewer->raise(); this->viewer->activateWindow(); 

* viewer是一个指向从QDeclarativeView派生的QmlApplicationViewer的指针

这个问题是特定于Windows的。 如果活动窗口属于某个进程,则Windows不允许其他进程更改活动窗口。

(不要尝试以下方法: https : //wiki.qt.io/Qt_project_org_faq#QWidget_ :: activateWindow.28.29 _-_ behavior_under_windows )

尝试这个:

 viewer.setWindowState( (windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); viewer.raise(); // for MacOS viewer.activateWindow(); // for Windows 

它在我的项目中工作(在我的项目查看器是QMainWindow): https : //github.com/iptton/Rythem 。

 for ( QWindow* appWindow : qApplication.allWindows() ) { appWindow->show(); //bring window to top on OSX appWindow->raise(); //bring window from minimized state on OSX appWindow->requestActivate(); //bring window to front/unminimize on windows } 

请注意,这也会在OSX和Windows上显示来自其他虚拟桌面的窗口。 我没有在Linux上测试这个,但它可能工作。

这个问题不是特定于Windows ….我在Linux上有同样的问题。 我的解决方案是关闭()窗口之前,我打开()它。