Amener la fenêtre au premier plan -> raise (), show (), activateWindow () ne fonctionne pas

Dans mon application Qt, j’ouvre une URL dans le navigateur par défaut. Par la suite, je veux mettre la fenêtre principale de mon application au premier plan.

J’ai essayé toutes les approches possibles, mais aucune n’a fonctionné. Tout ce qu’il fait est de clignoter dans la barre des tâches (de Windows 7) Voici un exemple:

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

* Le visualiseur est un pointeur sur un QmlApplicationViewer dérivé de QDeclarativeView

Ce problème est spécifique à Windows. Si la fenêtre active appartient à un processus, Windows n’autorise pas les autres processus à modifier la fenêtre active.

(N’essayez pas ce qui suit: https://wiki.qt.io/Qt_project_org_faq#QWidget_::activateWindow.28.29_-_behavior_under_windows )

essaye ça:

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

cela fonctionne dans mon projet (dans mon visualiseur de projet est 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 } 

Notez que cela ouvre également la fenêtre des autres bureaux virtuels sur OSX et Windows. Je n’ai pas testé cela sur Linux, cela peut marcher.

Ce problème n’est pas spécifique à Windows …. J’ai le même problème sous Linux. Ma solution a été de fermer () la fenêtre avant de la rouvrir ().