9
votes

Qt rightclick qpushbutton

J'utilise QT Creator pour créer une interface graphique pour un jeu de mineseeper. Comment puis-je savoir qu'un qpushbutton a cliqué avec RightClick? pour le drapeau dans le jeu. Dans un autre mot, lequel signal utilisé pour RightClick?


2 commentaires

Vous aurez probablement besoin de remplacer événement () et émettre le signal vous-même.


Pourquoi une personne -1 cette question ?? Oui, il aurait pu faire plus d'efforts, mais la question est bonne. Merci à Muhammad pour une bonne réponse.


3 Réponses :


6
votes

Je pense que qpushbutton est implémenté en interne pour écouter les clics de souris gauche uniquement. Mais vous pouvez facilement étendre qpushbutton et ré-implémentons disons l'événement de sortie de la souris et faites votre truc si le bouton droit de la souris a été enfoncé, par ex. émettez une personnalisation RightsClicked () signal par exemple: xxx

... ou vous pouvez créer une surcharge du signal cliqué qui transfère le pointeur de la souris de la souris afin que vous puissiez faire la même vérification à l'extérieur du bouton. xxx

alors vous effectuez la vérification dans la fente, vous connectez le bouton cliqué sur (qmouseevent *) signal sur et procéder en conséquence.


5 commentaires

J'utilise qpushbutton et il n'y a pas de bouton () dans cela. que devrais-je faire?


@Khoc quoi ?? Bouton () est une méthode de qmouseevent .


Donc, je ne sais pas comment puis-je utiliser MouseereleeeEvent . Pourquoi appelez-vous RightsClicked () dans Mouseereleeeevent ?


@Khoc - car l'événement cliqué sur se produit lorsque vous appuyez sur, puis relâchez le bouton. De cette façon, vous obtenez le comportement par défaut - lorsque vous cliquez sur un bouton, mais déplacez la souris hors de celui-ci avant de la publier - vous n'obtenez pas de clic. Vous pouvez personnaliser cela en fonction de vos besoins, vous pouvez également utiliser la sourissePender si vous le souhaitez.


Pourquoi ne pas appeler le parent MousereleeEvent () au lieu d'émettre cliqué () manuellement ici?



18
votes

Créez votre propre bouton avec un filtre à MousePresseVent Strong> Slot.

qrightclickbutton.h p> xxx pré>

qrightclickbutton.cpp p>

void MainWindow::onRightClicked()
{
    qDebug() << "User right clicked me";
}


1 commentaires

Si quelqu'un souhaite se connecter () à la fois au signal Generic Clicked () et à RightsClicked Signal () - Il est nécessaire d'appeler qpushbutton :: MousePressevent (E); à la fin du code domincé > MousePresseVent (qmouseevent * e)



3
votes

Je viens d'écrire ce petit adaptateur d'assistant pour effectuer tout bouton existant en cliquant avec le bouton droit de cliquer avec le bouton droit de la souris sans la sous-classement:

connect(ui->pushButton, &QPushButton::clicked, [](){qDebug() << "Button clicked";});
new CRightClickEnabler(ui->pushButton);


2 commentaires

Ce code est génial, car j'avais des problèmes graves à faire sous-classement au travail (QT noob ici). Je veux juste souligner quelque chose d'important, ce sera flaky si vous cliquez avec le bouton droit de la souris sur l'objet trop vite. Il vous suffit de vous gérer aussi pour qevent :: MouseButTondLllick ! En fait, je dirais probablement que cela devrait simplement être changé en qevent :: MouseButtonRelease Depuis cela quand cliquez sur Explique de toute façon. pas sur la presse.


@Stevenlu, c'est une bonne et sensée suggestion, merci de le pointer! Et je suis heureux d'entendre mon petit indicateur de code a aidé.