31 votes

Mettre la fenêtre en avant -> raise(),show(),activateWindow() ne fonctionnent pas

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

J'ai essayé toutes les approches que j'ai pu trouver, mais aucune n'a fonctionné. Tout ce qu'il fait c'est clignoter dans la barre des tâches (de Window 7) Voici un exemple :

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

*viewer est un pointeur vers un QmlApplicationViewer qui est dérivé de QDeclarativeView.

0voto

Alex Nevskiy Points 127

Pour Windows, je l'ai fait avec WinAPI. Vous devez également connaître le titre de la fenêtre ;

#include <windows.h>
const QString windowTitle = "Some title";

HWND hwnd = ::FindWindowA(NULL, windowTitle.toLocal8Bit());
if (hwnd != NULL) {
    if (::IsWindowVisible(hwnd)) {
        ::SwitchToThisWindow(hwnd, TRUE);
    }
}

0voto

sercxjo Points 61

Le texte suivant est emprunté au forum et ça marche pour moi :

auto eFlags = viewer.windowFlags();
viewer.setWindowFlags(eFlags|Qt::WindowStaysOnTopHint);
viewer.show();
viewer.setWindowFlags(eFlags);
viewer.show();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X