IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Lier deux SpinBox par une proportionnalité


Sujet :

Qt

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut Lier deux SpinBox par une proportionnalité
    Bonsoir à tous.

    Mon soucis actuellement est de pouvoir lier 2 spinbox via une proportionnalité.
    Je m'explique
    On peut lier 2 spinbox via un signal spin1.ValueChanged connecté au slot spin2.setValue. Toutefois, cette liaison est basique. La valeur du premier spin est bêtement recopiée dans le second spin.

    Moi, j'aimerais que la valeur du second spin soit une opération sur la valeur du premier. Par exemple ça pourrait être le premier multiplié par 1.196. Et là, je n'y arrive pas. Enfin si, j'y arrive en connectant le spin n° 1 sur un slot perso qui va remplir le spin n° 2 mais ça ne me satisfait que moyennement. Surtout si je dois lier de la même façon deux autres spin 3 et 4 => obligé de connecter le spin n° 3 sur un autre slot qui va remplir le spin n° 4. Bref moyen moyen...

    Si quelqu'un avait une solution élégante...

    Voilà. Merci à tous.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Tu pourrais faire ton propre QSpinBox en redéfinissant la méthode setValue un peu dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void TaSpinBox::setValue(int val)
    {
        val = _coeff * val;
        QSpinBox::setvalue(val);
    }
    _coeff serait une donnée membre rajoutée dans ta classe fille.


    A part ça je ne vois pas de moyen de personnaliser le slot de manière générique.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par YoniBlond Voir le message
    Tu pourrais faire ton propre QSpinBox en redéfinissant la méthode setValue un peu dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void TaSpinBox::setValue(int val)
    {
        val = _coeff * val;
        QSpinBox::setvalue(val);
    }
    _coeff serait une donnée membre rajoutée dans ta classe fille.


    A part ça je ne vois pas de moyen de personnaliser le slot de manière générique.
    Yop, merci de ta réponse.

    Aujourd'hui j'ai cru avoir la solution via le QSignalMapper(). Puis, au moment du setMapping(), je me suis aperçu que ça ne marcherait pas (on pouvait lier le spin1 au map, ou le spin2, mais pas les deux).

    Pour l'instant j'ai réussi à faire un bricolage de cette façon
    1) je lie le spin1 au spin2 via un signal(valueChanged) relié au slot(setValue)
    2) je lie le spin2 à un slot perso activé sur valueChanged
    3) le slot perso commence par bloquer les signaux du sender(), multiplie la valeur du sender() puis débloque ses signaux.
    Donc quand le spin1 change, le spin2 prend la valeur du spin1. Puis le slot perso entre en jeu et multiplie ladite valeur du spin2 (le spin2 étant devenu le sender()). Ca marchouille et c'est ouvert à d'autres couples spin3 et spin4 ou plus mais c'est quand-même pas tiptop élégant.

    Le principal inconvénient de ta solution, c'est que si tu redéfinis setValue(), alors tu te verrouilles la possibilité d'envoyer une valeur dans le spin n° 2. Ou alors si tu l'envoies, elle sera démultipliée aussi ce qui n'est pas forcément pertinent.

    Toutefois ton idée est intéressante mais je pense qu'il faut la conceptualiser par un objet hérité qui, à chaque signal ValueChanged(x), émettra automatiquement un autre signal ValueExtended(x * coeff). Puis je relierai ce signal ValueExtended du spin1 au slot setValue du spin2...

    Je verrai ça demain. A+
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Oui tu as raison, mais si tu souhaites conserver un slot "setValue" normal en plus, tu peux très bien nommer la fonction que j'ai proposé en un nouveau slot plutôt qu'une surcharge du slot de base. Ainsi ton spinbox conserve le setValue d'origine pour le reste de l'appli, et propose un slot adapté pour tes spinbox émetteurs.

Discussions similaires

  1. Lier deux figures par un bouton
    Par hassancoeur dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 09/01/2007, 12h35
  2. Réponses: 1
    Dernier message: 16/12/2006, 12h01
  3. relier deux reseaux par une ligne telephonique?
    Par maamar1979 dans le forum Hardware
    Réponses: 2
    Dernier message: 13/09/2006, 13h41
  4. [DEB] lier deux tables par un NumAuto
    Par ip203 dans le forum Access
    Réponses: 17
    Dernier message: 07/06/2006, 15h06
  5. Lier deux composants par une fléche
    Par Mehdi Feki dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2006, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo