2010-02-10 15 views
7

Mon application QT a plusieurs fenêtres et parfois, même si les fenêtres sont déjà ouvertes mais enterrées sous d'autres fenêtres, l'utilisateur va sélectionner une option pour en ouvrir une depuis la fenêtre principale, auquel cas je veux simplement l'élever et la rendre l'actuel. Maintenant, en utilisant QWidget-> raise fait de cette fenêtre aller au-dessus de toutes les autres fenêtres, mais il ne le sélectionne pas et c'est ce que je dois faire. J'ai essayé QWidget-> setFocus mais cela ne fait rien. En attendant, j'utilise une combinaison de QWidget-> close suivie de QWidget-> show mais je voudrais savoir s'il y a une commande à utiliser avec -> raise.dans Qt, Comment faire une fenêtre être la fenêtre en cours?

J'ai essayé:

 pMission->raise(); 
     pMission->setFocus(Qt::ActiveWindowFocusReason); 

mais il ne marchait pas si je l'ai utilisé:

 pMission->close(); 
     pMission->show(); 
+0

Que voulez-vous dire « ... aller au-dessus de toutes les autres fenêtres, mais il ne marche pas sélectionner »? –

+0

Je veux dire la commande pMission-> raise(); fait que la fenêtre soit au-dessus de toutes les autres fenêtres mais elle ne devient pas la fenêtre "courante". –

Répondre

8

Avez-vous déjà essayé QWidget :: activateWindow?

À partir du fichier d'aide, cette fonction va

Définit le widget de haut niveau contenant ce widget à la fenêtre active. Une fenêtre active est une fenêtre visible de niveau supérieur qui a le focus d'entrée au clavier.

3

Sur MacOS Lion avec Qt 4.8.0, raise() était le seul qui fonctionnait pour moi. activateWindow() et setFocus() ne l'ont pas fait.

(je n'ai pas assez de karma pour faire un commentaire sur la réponse de Mason)

+0

A partir de Qt 5.3.2, 32 bits, 'activateWindow()' fonctionne comme prévu (comme Mason décrit) dans OS X 10.10 Yosemite. – SexyBeast

Questions connexes