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 :

Faire disparaître des éléments d'une disposition

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Faire disparaître des éléments d'une disposition
    Bonjour,

    Voilà plusieurs jours que j'ai un soucis avec QtCreator. Je m'explique, j'ai décider de coder un jeu de carte (la bataille) en C++ sur Qt, j'ai coder le bouton distribuer qui donne à chacun des deux joueurs 26 cartes différentes, ensuite le bouton jouer qui permet de prendre la dernière carte des paquets de chaque joueurs et de les afficher sur le coté maintenant je souhaiterais faire en sorte que lorsque je clic sur le bouton rendre les cartes affiché par le bouton jouer disparaissent du layout mais je n'y arrive pas, je ne comprend pas pourquoi, cela fait plusieurs jours que je bûche sur ce problème et toujours pas de solution quelqu'un aurait une idée ? (j'ai fait des recherches google et sur d'autres forums je n'ai obtenu aucun résultat et j'ai penser au "hide()" mais ce n'est pas ce que je recherche)

    Nom : Capture2.jpg
Affichages : 87
Taille : 191,3 Ko

    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
    void MainWindow::on_Jouer_clicked()
    {
        carte c1 = tableJ1.last();
        carte c2 = tableJ2.last();
        tableJ1.removeLast();
        tableJ2.removeLast();
     
        joueur.setMiseDuJoueur(c1);
        tableJ1Bis.append(joueur.getMiseDuJoueur().first());
        adversaire.setMiseDuJoueur(c2);
        tableJ2Bis.append(adversaire.getMiseDuJoueur().first());
        jeuDeCartes.montrer(c1);jeuDeCartes.montrer(c2);
        ui->CartesJoueurDev->addWidget(tableJ1Bis.first().label);
        ui->CartesAdvDev->addWidget(tableJ2Bis.first().label);
    }
     
    void MainWindow::on_Rendre_clicked()
    {
        tableJ1Bis.removeLast();
        ui->CartesJoueurDev->removeWidget(tableJ1Bis.first().label);
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un appel à removeWidget() seul sur un widget ne fait que le supprimer de la liste des éléments gérés par le layout*, il n'est ni détruit ni caché. Simplement il ne s'adapte plus lorsque le parent est redimensionné. Il reste dorénavant cantonné à l'emplacement où il était.

    Tu as ensuite le choix entre le détruire (delete), le placer dans un autre layout, ou le cacher (hide()) de façon plus ou moins temporaire.

    * son parent, lui, reste inchangé.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Alors oui mais delete je ne veux pas détruire le layout seulement enlever son contenu et par la même occasion ne plus le voir à l'écran jusqu'a ce que le joueur appuie de nouveau sur le bouton jouer

  4. #4
    Invité
    Invité(e)
    Par défaut
    Non, le delete est à appeler sur le widget que tu veux détruire, pas sur le layout.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Autant pour moi j'ai fait une confusion xP par contre du coup maintenant avec le delete sa me supprime bien mon widget mais lorsque après je re-appuie sur jouer sa plante et le jeu se ferme

    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
    void MainWindow::on_Jouer_clicked()
    {
        carte c1 = tableJ1.last();
        carte c2 = tableJ2.last();
        tableJ1.removeLast();
        tableJ2.removeLast();
     
        joueur.setMiseDuJoueur(c1);
        tableJ1Bis.append(joueur.getMiseDuJoueur().first());
        adversaire.setMiseDuJoueur(c2);
        tableJ2Bis.append(adversaire.getMiseDuJoueur().first());
        jeuDeCartes.montrer(c1);jeuDeCartes.montrer(c2);
        ui->CartesJoueurDev->addWidget(tableJ1Bis.first().label);
        ui->CartesAdvDev->addWidget(tableJ2Bis.first().label);
    }
    void MainWindow::on_Rendre_clicked()
    {
        //ui->CartesJoueurDev->removeWidget(tableJ1Bis.last().label);
        //ui->CartesAdvDev->removeWidget(tableJ2Bis.last().label);
        if(tableJ1Bis.last().valeur > tableJ2Bis.last().valeur)
        {
            tableJ1.append(tableJ1Bis.last());tableJ1.append(tableJ2Bis.last());
            tableJ1Bis.removeLast();tableJ2Bis.removeLast();
        }
        delete tableJ1Bis.last().label;
        delete tableJ2Bis.last().label;
        joueur.removeMiseDuJoueur();
        adversaire.removeMiseDuJoueur();
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            tableJ1Bis.removeLast();tableJ2Bis.removeLast();
        }
        delete tableJ1Bis.last().label;
        delete tableJ2Bis.last().label;
    Là, tu supprimes le dernier élément avant de delete le widget, ce qui fait que tu deletes l'avant dernier qui est probablement utilisé par la suite.
    Assure-toi également, avant d'accéder aux .first() et .last(), que tes tableaux ne sont pas vides.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Justement j'ai enlever les removelast et la encore le logiciel plante au même endroit

  8. #8
    Invité
    Invité(e)
    Par défaut
    À quel moment crées-tu tes widgets ? Ne réutiliserais-tu pas par hasard ceux qui ont été delete ?

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Je ne pense pas mais dans le doute je met le code complet de la classe (le seul endroit ou j'utillise des widgets) mais je pense pas réutilliser ceux qui sont delete

    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
    void MainWindow::on_Distribuer_clicked()
    {
        for (int i=0; i<52; i++)
        {
            carte c = jeuDeCartes.donner();
            if(tourJoueur && nbsCarteJ1 < 26)
            {
                nbsCarteJ1++;
                joueur.setMainDuJoueur(c);
                jeuDeCartes.cacher(c);
                tableJ1.append(joueur.getMainDuJoueur().last());
                ui->CartesJoueur->addWidget(tableJ1.first().label);
                tourJoueur=false;
            }
            else
            {
                //nbsCarteJ2++;
                adversaire.setMainDuJoueur(c);
                jeuDeCartes.cacher(c);
                tableJ2.append(adversaire.getMainDuJoueur().last());
                ui->CartesAdv->addWidget(tableJ2.first().label);
                tourJoueur=true;
            }
        }
    }
    void MainWindow::on_Jouer_clicked()
    {
        carte c1 = tableJ1.last();
        carte c2 = tableJ2.last();
        tableJ1.removeLast();
        tableJ2.removeLast();
     
        joueur.setMiseDuJoueur(c1);
        tableJ1Bis.append(joueur.getMiseDuJoueur().first());
        adversaire.setMiseDuJoueur(c2);
        tableJ2Bis.append(adversaire.getMiseDuJoueur().first());
        jeuDeCartes.montrer(c1);jeuDeCartes.montrer(c2);
        ui->CartesJoueurDev->addWidget(tableJ1Bis.first().label);
        ui->CartesAdvDev->addWidget(tableJ2Bis.first().label);
    }
    void MainWindow::on_Rendre_clicked()
    {
        //ui->CartesJoueurDev->removeWidget(tableJ1Bis.last().label);
        //ui->CartesAdvDev->removeWidget(tableJ2Bis.last().label);
        if(tableJ1Bis.last().valeur > tableJ2Bis.last().valeur)
        {
            tableJ1.append(tableJ1Bis.last());tableJ1.append(tableJ2Bis.last());
            //tableJ1Bis.removeLast();tableJ2Bis.removeLast();
        }
        delete tableJ1Bis.last().label;
        delete tableJ2Bis.last().label;
        joueur.removeMiseDuJoueur();
        adversaire.removeMiseDuJoueur();
    }

  10. #10
    Invité
    Invité(e)
    Par défaut
    Difficile à dire. Tout ce que je peux te conseiller c'est de déboguer ton programme.
    Et je réitère mon conseil :
    Citation Envoyé par Winjerome Voir le message
    Assure-toi également, avant d'accéder aux .first() et .last(), que tes tableaux ne sont pas vides.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    enfaite mes tableau sont vides forcément puisque dans le code ils récupèrent la carte qui devient leur seule valeur et quand on clic sur le bouton rendre il redeviens vide pour accueillir d'autres cartes comme pour le jeu "la bataille"

Discussions similaires

  1. Comment faire pour que des éléments d'une image bougent
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/06/2016, 21h59
  2. Réponses: 2
    Dernier message: 04/04/2015, 10h46
  3. Liste Déroulante - faire apparaître et disparaître des éléments
    Par crush911 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/10/2011, 08h11
  4. Réponses: 3
    Dernier message: 21/01/2009, 13h49
  5. [VB.NET] Enregistrement des éléments d'une listBox
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 9
    Dernier message: 18/05/2004, 14h48

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