Comment émettre un signal à partir d'un QPushButton lorsque la souris passe sur elle?
Récemment, j'ai voulu que QPushButton
peut émettre un signal, lorsque le pointeur de la souris entre. Comment puis-je faire?
Je sais que QPushButton a déjà défini signal, comme clicked()
, pressed()
, destory()
et ainsi de suite. Mais pas de signal comme hover(), enter(), ...
J'ai regardé quelques informations à ce sujet: Quelqu'un a dit qu'il peut être fait en css. Je ne comprends pas. Pouvez-vous me donner quelques conseils ? Merci!!!!
- Si vous pouvez expliquer ce que vous voulez faire lorsque le curseur de la souris, il peut ne pas être nécessaire d'intercepter un tel événement. Si par exemple, vous voulez changer l'apparence du bouton, vous pouvez le faire avec une feuille de style.
- Je vous remercie .. je veux le faire: Si il y a deux Composants, une Fois que le pointeur de la souris est passez la souris sur l'un, l'autre est unvisiable...
- Ok, puisque vous voulez affecter un bouton basé sur l'interaction de la souris avec un autre bouton, vous aurez en effet besoin d'intercepter cet événement.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser QWidget::enterEvent ( QEvent * event ) pour cela.
Vous remplacer cet événement et envoyer un personnalisé du signal lorsque cet événement se produit.
Vous devez d'abord activer le suivi de la souris pour ce widget (
setMouseTracking(true)
dans le constructeur par exemple).Fichier d'en-tête:
Fichier Source:
Où vous utilisez votre bouton:
Bien que @Exa a répondu à cette question, je veux vous montrer une autre solution qui ne nécessite pas de sous-classe QPushButton et est flexible dans son utilisation! ( C'est ce que j'ai besoin dans mon projet)
Etape 1/2 : le remplacement des eventFilter.
LoginWindow.h:
LoginWindow.cpp:
Étape 2/2 : l'Installation de eventFilter sur la cible des widgets.
QToolButton
(pour montrer un texte personnalisé popup sur planant au-dessus d'elle), le bouton devient invisible, mais planant au-dessus de là où il est censé être révèle le pop-up tout droit, et même le curseur se transforme en pointeur comme prévu, puisque je l'ai mis comme ça pour le bouton!return true
dans leeventFilter
fonction, utilisezreturn QWidget::eventFilter(obj, event);
et aussi, on n'a pas besoin d'autre condition. Je l'ai fait et la disparition du bouton d'état de s'en alla.Assurez-vous d'ajouter: "après le mot-clé public
Si je me souviens correctement, vous devez activer le suivi de la souris pour le bouton (Documentation de Qt) et remplacer
QWidget::onEnter()
etQWidget::onLeave()
.Vous aurez besoin pour créer un bouton personnalisé classe héritant de QPushButton. Vous pouvez définir des signaux pour mouseEnter et mouseLeave dans votre classe personnalisée et émettent de la
onEnter()
etonLeave()
méthodes que vous avez besoin pour remplacer.