9
votes

QCheckBox: Comment différencier les modifications induites par l'utilisateur à l'état et celles rendues par programmation?

Est-ce que je manque quelque chose ou qu'il n'y a vraiment pas de moyen (prêt / intégré) de modifier par programme l'état d'une boîte à QCheck sans émettre le signal "Void stachged (Int State)"?

Le signal mentionné ci-dessus est émis, que "SetCochefeckstate de vide (Qt :: CheckState State)" a été appelée ou que l'utilisateur a changé l'état via l'interface utilisateur, et il n'y a pas de signal "étamé" comme avec le QLineDedit. < / p>

Donc, s'il n'y a pas de moyen prête à différencier les modifications programmatiques et induites par l'utilisateur à l'état de la zone QCheckbox, et que les seules options sont sous-classement / ajoutant le signal «étalé» ou tripoter »Void QObject :: Blocksignals ( Bool Block) ", pourquoi cela doit-il être tel, c'est-à-dire qu'il s'agit d'une incohérence (à Qt)?


0 commentaires

3 Réponses :


1
votes

Si vous voulez

Modification programmable de l'état d'une boîte à QCheck

Utilisez SetCheckstate Méthode.

P.s. Je ne comprends pas ce que cela signifie

Modifier l'état d'une boîte à QCheck ... émettre un signal "vide statÉCHanged (état)"

Vous devriez probablement lire Signaux et emplacements Sujet plus prudent.


5 commentaires

Cela signifie que mon anglais est mauvais :) et aussi les suivants: 1) Vous appelez SetCheckstate (...) 2) "Void stachged (int State)" n'est pas émis. En d'autres termes, je suis intéressé par un comportement comme celui de QLineDit. Citation de la documentation QT: "Void QLineDit :: Texthedited (Cons-Texte) [Signal] ... Contrairement à TEXTCHANGED (), ce signal n'est pas émis lorsque le texte est modifié par exemple en appelant Settext ()."


Je comprends ton point de vue. Je ne vois qu'une seule option: Créer et utiliser au lieu de la classe QCheckBox Votre propre classe basée sur QCheckBox (sous-classe IT), puis définissez une nouvelle méthode (ou redrifine SetChecké). Votre méthode doit différer de l'une de l'une des qcheckbox ( QT .Gitorious.org / qt / qt / blobs / maître / src / gui / widgets / ... ) uniquement dans la dernière ligne de code. Vous n'avez pas besoin d'EMIT STETCHANGED (STATE); Mais je ne pense pas que ce soit une bonne solution ... Pourquoi avez-vous besoin d'un comportement aussi différent?


Il semble y avoir un besoin de configurer certains widgets dont les signaux sont déjà connectés sans les émettre (signaux). Quoi qu'il en soit, je peux toujours utiliser "qObject :: blocksignals (bloc bool)". P.s. (off.) Votre page Web à << a href = "http://sites.google.com/site/kemiisto/home" rel = "nfollow Noreferrer"> sites.google.com/site/kemiisto/home > est en russe, êtes-vous vraiment de là?


Aha! Les blocksignals semblent être une solution. Donc, vous l'avez trouvé par vous-même. =) P.S. Oui, je suis russe par origine.


En fait, je suis un peu nouveau à l'avance, je me demandais simplement s'il y avait une possibilité élégante enfouie dans un endroit où l'arbre d'héritage :) merci, в любом случае.



16
votes

Si vous n'avez besoin que d'être informé de l'entrée de l'utilisateur, écoutez xxx

sinon connectez-vous à xxx

ou xxx


0 commentaires

9
votes

Une approche qui fonctionne pour tous les signaux et widgets consiste à envelopper les appels vers SetChecked () dans une paire de blocksignals () Appels: xxx

ou, avec quelque chose que chaque programmeur QT aura dans sa boîte à outils: xxx

A Raii classe. Utilisation: xxx

EDIT 2013-12-10: qt 5.3 aura QsignalBlocker intégré.


0 commentaires