Question

Je suis en train de créer une application dans Qt / C ++ avec Qt4.5 et que vous souhaitez les toutes les fenêtres actives pour changer l'opacité sur un événement ... mouseover

Si je comprends bien, il n'y a aucun événement mouseover explicite dans Qt.

Cependant, je suis arrivé fonctionnement rudimentaire réimplémentant de mouseMoveEvent de QWidget () dans la classe qui déclare mon mainwindow. Mais n'est pas appelé le mouseMoveEvent de la fenêtre principale lorsque la souris se déplace sur l'une des cases du groupe j'ai créé là-dedans (understandbly depuis QGroupBox a sa propre reimplementation de mouseMoveEvent).

Alors comme un travail pas cher autour, je suis encore en utilisant le mouseMoveEvent de mon mainwindow mais une requête de la position de la souris globale et en fonction de la position (x, y) de la fenêtre principale (obtenue par -> pos ()) et la taille de la fenêtre (-> taille -> rHeight et rWidth), je vérifie si la souris est dans les limites de la zone de la fenêtre principale et changer ainsi l'opacité

.

Cela a eu un succès très limité. La frontière droite fonctionne très bien, l'opacité change gauche 4 pixels début. Le sommet ne fonctionne pas (sans doute parce que la souris passe par la barre de menus et la barre de titre) et le fond change trop tôt.

Je pensais de créer une classe conteneur QWidget vide, puis placer tout le reste là-bas, mais je sentais qu'il résoudrait toujours pas la grande question du widget de base ne recevant pas le mouseMoveEvent si elle a déjà été mis en œuvre chez un enfant widgets.

S'il vous plaît suggérer des corrections / erreurs que j'ai fait dans ma méthode ou des méthodes alternatives pour y parvenir.

p.s. Je doute cette question est importante, mais je travaille Qt Creator IDE, l'intégration ne Qt dans VS2008 (ce sont les mêmes classes Anyways - compilateur différent si, MinGW )

Était-ce utile?

La solution

L'installation des filtres d'événements pour chacun de vos widgets enfants pourrait faire l'affaire. Cela permettra à votre fenêtre principale pour recevoir des événements de l'enfant tels que ceux de vous boîtes de groupe. Vous pouvez trouver un exemple de code .

Autres conseils

Vous pouvez être intéressé par les filtres d'événements. QObject prouve un moyen d'intercepter tous les événements passer comme un éclair autour de votre application.

http://doc.trolltech.com/4.5/eventsandfilters.html # filtres d'événements-

Si je comprends ce que vous essayez de faire, je serais réimplémentez enterEvent () et leaveEvent () du widget. L'événement souris à l'entrée déclencherait le fondu et le leaveEvent déclencherait le fade-out.

EDIT: Après la relecture à plusieurs reprises, je ne suis toujours pas sûr de ce que vous essayez d'accomplir. Désolé si ma suggestion ne vous aide pas. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top