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

Discussion :

Connexion entre des widgets

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut Connexion entre des widgets
    Bonjour à tous,

    Je souhaite créer une fenêtre avec 2 onglets pour créer un personnage dans le but de créer un petit jeu vidéo.
    Sur le premier onglet, on choisit le "type" de personnage (Guerrier ou mage par exemple).
    Et en fonction du choix de type de perso, je souhaite afficher une fenêtre différente dans le 2nd onglet, (pour sélectionner un inventaire spécifique, arme pour guerrier, sort pour le mage)
    J'arrive bien à afficher mes différents "types" d'inventaire. Donc jusque-là pas de problème, c'est maintenant que ça se corse.

    Sur ce 2nd onglet, j’attribue des points à chacun des objets de l'inventaire sélectionné par le joueur pour éviter que le perso soit trop équipé.
    Pour "limiter" le nombre de points, dés qu'on sélectionne un objet (épée par exemple) un QProgressBar se remplit et a une limite.

    Pour alléger mon code, je crée une classe pour afficher ce 2nd onglet pour chaque "type" de perso (pageMage, pageGuerrier). Ok? Tout le monde suis?!?

    Mon problème est que les connexions de cette classe (celle qui représente le 2nd onglet) ne sont pas "visible" par ma classe qui crée la fenêtre principale pour les 2 onglets.

    Je comprends pourquoi ça marche pas. En effet, lorsque je créer ma classe "principale" j'appelle la classe 2nd onglet et c'est tout.
    J'ai essayé de "forcer" la connexion en récupérant avec des GET les entités connectées mais ça marche pas.

    Dois-je en conclure qu'on ne peut pas créer de classe avec des connexions et créer une instance de celle-ci qui "marche de manière autonome" avec ses connexions qui marche?

    Je ne mets pas les codes tout de suite, j'attends de voir vos réactions tout en cherchant une solution.

    Merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Bonjour,

    Si c'est la fenêtre principale qui créer les sous widgets, pourquoi ce ne serait pas la fenêtre principale qui créer les connexions (connect) entre les deux widgets, grâce au système de signal/slot.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut
    Re:bonjour,

    Merci pour ta réponse mais ...... elle m'aide pas trop

    En effet,
    Ce n'est pas la fenêtre principale qui créer "vraiment" les sous widgets.

    Dans l'idée, j'ai créé une classe, "onglet2_guerrier" avec des connexion qui marche bien que je lance la classe "seul".

    Par contre, si je crée cette classe dans "ma fenêtre" principale, là, mes connexions de cette classe (onglet2_guerrier) ne marche plus. Et comme cette classe hérite d'un QDialog les signaux qui lui sont associés sont "pauvre"

    En GROS voici e code hyper simplifié, (et donc pas bien "écris" ) :

    Voici la classe ongle2
    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
     
    class Onglet2: public QDialog
    {
    Q_OBJECT
     
    Onglet2
        {
         QCheckBox* epee = new QCheckBox;
         Qprogressbar* indicateur = new Qprogressbar;
     
     
    QObject::connect(epee,SIGNAL(clicked()),this,SLOT(calculQprogressbar(bool)));
    QObject::connect(this,SIGNAL(changeValeurSprogessbar()),indicateur,SLOT(setValue(int)));
     
        }
     
    signals:
    void changeValeurSprogessbar (int valeurInventaire);
     
    public slots:
        void calculQprogressbar(bool a)
        {
        if a == TRUE;
        m_valeurInventaire += valeurPotion;
        emit changeValeurSprogessbar (int m_valeurInventaire);
        }
     
    };
    Maintenant la classe de la fenêtre principale

    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
     
    class Fenetre: public QDialog
    {
    Q_OBJECT
     
    Fenetre
        {
            m_typePerso = new QComboBox(); // Avec comme choix Guerrier et Mage
     
           QObject::connect(m_typePerso,SIGNAL(currentChanged(int)),this,SLOT(chargePage2(int))); // Connexion pour charger la "page" que je veux en fonction du type de Perso.
     
    ///////////Connexion?!? ////////////
        }
     
    public slots:
        chargePage2(int)
        {
            if (m_typePerso == mage) { Onglet2* page2 = Onglet2*(parent) } // La aussi j'ai un prb, car si je change de type de Perso, le nouveau type ne veux pas se charger.
        }
     
    };
    En espérant avoir fait un code assez simple sans trop l'être j'espère que vous comprenez mieux mon problème.
    Je veux bien créer une connexion entre page2 mais ces signaux sont seulement ceux de QDialog et ceux de ses parents.
    Donc impossible d'"appeler" ceux liés à la QProgressbar.

    Je sens et pense comprendre le problème, mais ne vois pas de solution pour le détourner à part tout mettre comme une brute dans ma classe Fenetre. C'est-à-dire ne pas faire de classe pour cette 2nd page. Ce qui me semble dommage pour de la POO.

    Merci pour vos réponse

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Je ferai hérité la classe Guerrier d'un QWidget pour plus de liberté (sans perdre trop d'avantages).

    Je ne vois pas pourquoi les connect ne marcheraient plus. Y a t-il des messages dans la sortie ?

    Il faut une classe par interface (donc deux classes pour tout le Guerrier (stats et type).
    La classe Fenêtre ferait un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {
        pTypes = new Types(this);
        pStats = new Stats(this);
     
        // Ici la liste des connect qu'il faut
    }
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut


    Je ferai hérité la classe Guerrier d'un QWidget pour plus de liberté (sans perdre trop d'avantages).
    Je me suis servis de QDialog car pour ouvrir ma 1er fenêtre pour choisir le nom et le type de Perso j’appelle la fonction exec.
    En effet, avant j'ai une autre fenêtre qui me demande quel partie que je veux faire, FFA, Team par exemple.
    Sinon je c'est pas trop comment "maintenir" cette nouvelle fenêtre "ouverte"

    Il faut une classe par interface (donc deux classes pour tout le Guerrier (stats et type).
    La classe Fenêtre ferait un truc genre :
    Bha.. Disons que pour moi ta classe type est le nom de ma classe hérité de la classe mère personnage.
    cf image :

    [IMG][/IMG]


    Y a t-il des messages dans la sortie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object::connect: No such slot onglet2::calculQprogressbar(bool) in onglet2.cpp:60
    Et ceux pour chacune de mes connexion de la classe onglet2

    C'est pour ça que j'ai cité plus haut

    Je comprends pourquoi ça marche pas. En effet, lorsque je créer ma classe "principale" j'appelle la classe 2nd onglet et c'est tout.
    J'ai essayé de "forcer" la connexion en récupérant avec des GET les entités connectées mais ça marche pas.

    Dois-je en conclure qu'on ne peut pas créer de classe avec des connexions et créer une instance de celle-ci qui "marche de manière autonome" avec ses connexions qui marche?
    Je seche trop là, je sens qu'il me manque un truc mais quoi?!?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Il va falloir faire en sorte de réparer tous les connects. J'imagine que c'est car Qt ne retrouve pas les signaux ou les slots.
    Peut être il faut réexecuter le moc (qmake/reconstruire tout) afin que Qt régénère sa hiérarchie.
    Sinon, en nous montrant du code (le projet prêt à compiler?) on sera plus à même de voir le soucis.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. connexion entre des pc win7 sur un LAN
    Par allibaba dans le forum Windows 7
    Réponses: 4
    Dernier message: 22/03/2014, 18h22
  2. Réponses: 4
    Dernier message: 03/09/2010, 15h52
  3. Réponses: 2
    Dernier message: 18/02/2009, 14h16
  4. Réponses: 5
    Dernier message: 08/11/2006, 13h25
  5. Réponses: 4
    Dernier message: 04/07/2002, 12h31

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