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? P>
3 Réponses :
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 ... 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. p> alors vous effectuez la vérification dans la fente, vous connectez le bouton RightsClicked () code> signal par exemple:
cliqué sur (qmouseevent *) code> signal sur et procéder en conséquence. p> p>
J'utilise qpushbutton code> et il n'y a pas de bouton
() code> dans cela. que devrais-je faire?
@Khoc quoi ?? Bouton () CODE> est une méthode de
qmouseevent code>.
Donc, je ne sais pas comment puis-je utiliser MouseereleeeEvent code>. Pourquoi appelez-vous
RightsClicked () code> dans
Mouseereleeeevent code>?
@Khoc - car l'événement code> cliqué sur code> 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 () code> au lieu d'émettre
cliqué () code> manuellement ici?
Créez votre propre bouton avec un filtre à qrightclickbutton.h p> qrightclickbutton.cpp p> void MainWindow::onRightClicked()
{
qDebug() << "User right clicked me";
}
Si quelqu'un souhaite se connecter () à la fois au signal Generic Clicked () et à RightsClicked Signal () - Il est nécessaire d'appeler qpushbutton :: MousePressevent (E); code> à la fin du code domincé > MousePresseVent (qmouseevent * e) code>
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);
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 Code>! En fait, je dirais probablement que cela devrait simplement être changé en
qevent :: MouseButtonRelease Code> 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é.
Vous aurez probablement besoin de remplacer
événement () code> 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.