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 :

Association de Spin Boxes


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Association de Spin Boxes
    Bonjour,

    Je développe en C++ une application sous Qt et j'aurais besoin d'un conseil.
    Jusqu'à présent, Qt Designer suffisait, j'associais les paramètres un à un.
    Maintenant, je cherche à associer des "SpinBox" ensemble pour envoyer leur valeur à une méthode ayant plusieurs paramètres.

    Je voudrais par exemple changer les coordonnées d'un point via une méthode changerpoint(double, double, double) et mettre à jour les coordonnées d'un point via une association de 3 "DoubleSpinBox".

    Quelle est la solution la plus adaptée? (Créer un composant personnalisé? ou utiliser le Mapping data?)


    Merci d'avance,
    Rémi

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    En y ayant réfléchit encore, je précise ma question!
    Je souhaite intégrer dans Qt Designer un widget personnalisé nommé ayant comme comme signal de sortie monSignal(double x, double y, double z).
    Je n'arrive pas à faire en sorte que x,y,z soit les valeurs des 3 Double Spin Box!! Dois je utiliser connect?

    Voici le header définissant la classe pour personnaliser le Widget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <QDoubleSpinBox>
    #include <QHBoxLayout>
     
    class MultiDSB : public QWidget
    {
        Q_OBJECT
     
        public:
        MultiDSB(QWidget *parent = 0);
        ~MultiDSB();
     
        public slots:
        void setValue(double value1, double value2, double value3);
     
        signals:
        void monSignal(double X,double Y, double Z);
     
     
        private:
        QDoubleSpinBox *m_Qdsb1;
        QDoubleSpinBox *m_Qdsb2;
        QDoubleSpinBox *m_Qdsb3;
     
        double m_value1;
        double m_value2;
        double m_value3;
    };
    Et le fichier source correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include "MultiDSB.h"
     
    MultiDSB::MultiDSB(QWidget *parent) : QWidget(parent)
    {
        m_Qdsb1 = new QDoubleSpinBox(this);
        m_Qdsb1->setGeometry(0,0,70,30);
        m_Qdsb2 = new QDoubleSpinBox(this);
        m_Qdsb2->setGeometry(70,0,70,30);
        m_Qdsb3 = new QDoubleSpinBox(this);
        m_Qdsb3->setGeometry(140,0,70,30);
        m_value1 = m_Qdsb1->value();
        m_value2 = m_Qdsb2->value();
        m_value3 = m_Qdsb3->value();
     
    }
     
     
    MultiDSB::~MultiDSB()
    {
    }
     
    void MultiDSB::setValue(double value1, double value2, double value3)
    {
        if(value1 != m_value1)
        {
            m_value1 = value1;
            emit monSignal(value1,m_value2,m_value3);
        }
     
        if(value2 != m_value2)
        {
            m_value2 = value2;
            emit monSignal(m_value1,value2,m_value3);
        }
     
        if(value3 != m_value3)
        {
            m_value3 = value3;
            emit monSignal(m_value1,m_value2,value3);
        }
     
    }

  3. #3
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    Une solution basique serait d'associer les signaux valueChanged(double) de tes 3spinboxes a un slot privé de ton widget perso, celui-ci émettant ton signal monSignal avec les valeurs des trois spinboxes.

    Sinon, pour une solution plus recherché, regarde du coté de QSignalMapper, ça doit pouvoir être faisable avec ça.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup, ça m'a permit de clarifier les choses! J'avais exactement besoin d'une indication précise sur les signaux et slots à utiliser :

    A présent, la 1ère solution fonctionne!
    Le header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <QDoubleSpinBox>
    #include <QHBoxLayout>
     
    class MultiDSB : public QWidget
    {
        Q_OBJECT
     
        public:
        MultiDSB(QWidget *parent = 0);
        ~MultiDSB();
     
        signals:
        void monSignal(double X,double Y, double Z);
     
        private:
        QDoubleSpinBox *m_Qdsb1;
        QDoubleSpinBox *m_Qdsb2;
        QDoubleSpinBox *m_Qdsb3;
     
        double m_value1;
        double m_value2;
        double m_value3;
     
     
        private slots:
        void monSlot();
    };
    Le fichier source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include "MultiDSB.h"
     
    MultiDSB::MultiDSB(QWidget *parent) : QWidget(parent)
    {
        m_Qdsb1 = new QDoubleSpinBox(this);
        m_Qdsb1->setGeometry(0,0,70,30);
        m_Qdsb1->setRange(-1,1);
        m_Qdsb1->setSingleStep(0.05);
        m_Qdsb1->setValue(0);
        m_Qdsb2 = new QDoubleSpinBox(this);
        m_Qdsb2->setGeometry(70,0,70,30);
        m_Qdsb2->setRange(-1,1);
        m_Qdsb2->setSingleStep(0.05);
        m_Qdsb2->setValue(0);
        m_Qdsb3 = new QDoubleSpinBox(this);
        m_Qdsb3->setGeometry(140,0,70,30);
        m_Qdsb3->setRange(-1,1);
        m_Qdsb3->setSingleStep(0.05);
        m_Qdsb3->setValue(-1);
     
        m_value1 = m_Qdsb1->value();
        m_value2 = m_Qdsb2->value();
        m_value3 = m_Qdsb3->value();
     
        connect(m_Qdsb1,SIGNAL(valueChanged(double)),this,SLOT(monSlot()));
        connect(m_Qdsb2,SIGNAL(valueChanged(double)),this,SLOT(monSlot()));
        connect(m_Qdsb3,SIGNAL(valueChanged(double)),this,SLOT(monSlot()));
    }
     
     
    MultiDSB::~MultiDSB()
    {
     
    }
     
    void MultiDSB::monSlot()
    {
        if(m_Qdsb1->value() != m_value1)
        {
            m_value1 = m_Qdsb1->value();
            emit monSignal(m_value1,m_value2,m_value3);
        }
        if(m_Qdsb2->value() != m_value2)
        {
            m_value2 = m_Qdsb2->value();
            emit monSignal(m_value1,m_value2,m_value3);
        }
        if(m_Qdsb3->value() != m_value3)
        {
            m_value3 = m_Qdsb3->value();
            emit monSignal(m_value1,m_value2,m_value3);
        }
     
    }
    Je vais à présent voir du côté du QMapping pour un code plus propre!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Association d'une dialog box a une classe avec visual studio 2012
    Par tonycalv dans le forum Développement Windows
    Réponses: 0
    Dernier message: 26/12/2014, 01h53
  2. Check box avec champ associé
    Par Mel_rose dans le forum SAP
    Réponses: 4
    Dernier message: 29/04/2014, 15h39
  3. Minimize Box evenement associé
    Par johannlb dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/07/2007, 12h28
  4. Messages associés aux Scroll-box
    Par ybruant dans le forum Windows
    Réponses: 1
    Dernier message: 02/12/2006, 13h59
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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