Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage d'image variable QPixmap - Qt

    16 novembre 2018 à 21:51:52

    Bonsoir,

    Je débute avec Qt et je suis en train de travailler sur un jeu de cartes, assez basique me direz vous.

    Je me heurte à un problème surement très simple pour vous, mais j'ai beau chercher et je trouve pas de solutions. 

    En fait j'affiche les jeux de cartes des joueurs via :

     ui->crt_j1_2->setPixmap(QPixmap("C:/.../images/as_coeur.png"));

    mais le truc est que le joueur va, par exemple, piocher une nouvelle carte et donc celle-ci va changer. Pour m'éviter de me retrouver avec 50 000 fois cette ligne dans mon code, j'aimerais gérer l'affiche depuis une fonction, mais le hic c'est que j'aimerais que :

    QPixmap("C:/.../images/as_coeur.png")

    soit lu comme une variable que je puisse mettre à jour ma variable puis l'afficher via le setPixmap, par exemple :

    valeur="as_coeur";
    if(valeur=="as_coeur")
    {sortie=QPixmap("C:/.../images/as_coeur.png")}
    setPixmap(sortie);

    Est ce que vous auriez une solution svp ?

    D'avance merci :)




    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2018 à 10:31:56

      Bonjour, tu peux faire un tableaux contenant tes chemins.

      ou même un taleau de QPixmap dans ton constructeur ou ailleur

      QPixmap cartes[32];
      carte[0]=QPixmap("C:/.../images/as_coeur.png");
      carte[1]=QPixmap("C:/.../images/sept_coeur.png");
      carte[2]=QPixmap("C:/.../images/huit_coeur.png");
      ...
      

      puis tu pourrais faire un peu comme tu veux au niveau traitement, en fonction de l'index:

      index=0;
      ...
      
      
      ui->cequilfaut->setPixmap(carte[index]);




      Je serais toi, je creerais un fichier ressource contenant toutes tes images de carte.

      http://doc.qt.io/qt-5/resources.html

      • Partager sur Facebook
      • Partager sur Twitter
        17 novembre 2018 à 14:11:33

        Au final j'ai fais encore plus simple, au lieu de devoir créer un tableau etc, je modifie le nom du chemin comme suit :

        void MainWindow::affiche_jdc(int n_jr, int n_crt, QString nom_carte)
        {   QString v_nom="C:/.../images/"+ nom_carte +".png";
        ui->crt_j1_1->setPixmap(QPixmap(v_nom)); ... }


        Je vais regarder pour le fichier ressource :)

        Tiens dans la continuité de mon programme, j'ai fais des boutons qui lorsque l'utilisateur clic dessus, la carte associée qui est face cachée devient visible. Jusque là ça marche niquel, sauf que j'incrémente un compteur à chaque fois qu'une carte se retourne et si sa valeur dépasse 3, je change le texte afficher dans la zone. Sauf que le compteur change bien de valeur mais la condition "if" n'est vérifiée qu'une fois et du coup le text ne change pas, je n'arrive pas à comprendre pourquoi.

        Ma fonction revel_carte qui est executée :

        void MainWindow::revel_carte(int jr){
        
                connect(ui->pb_crt_j1_1,SIGNAL(released()),this,SLOT(a_affiche_jdc()));
                connect(ui->pb_crt_j1_2,SIGNAL(released()),this,SLOT(a_affiche_jdc()));
                connect(ui->pb_crt_j1_3,SIGNAL(released()),this,SLOT(a_affiche_jdc()));
        
                if(cpt_revel1>=3){ ui->Text_info->setText("Test!");}
        
        ...
        }
        

        La fonction a_affiche_jdc() qu'elle appelle :

        voidMainWindow::a_affiche_jdc(){
        QPushButton*button=(QPushButton*)sender();
        QStringvou,nom_carte;
        intn_jr,n_crt;
        vou=button->objectName();
        if(vou=="pb_crt_j1_1"){n_jr=1;n_crt=0;nom_carte=j1r[0];}
        elseif(vou=="pb_crt_j1_2"){n_jr=1;n_crt=1;nom_carte=j1r[1];}
        elseif(vou=="pb_crt_j1_3"){n_jr=1;n_crt=2;nom_carte=j1r[2];}
        else{n_jr=2;n_crt=8;nom_carte=j2r[8];}
        affiche_jdc(n_jr,n_crt,nom_carte);
        cpt_revel1++;}

        -
        Edité par Vykel 17 novembre 2018 à 16:38:23

        • Partager sur Facebook
        • Partager sur Twitter

        Affichage d'image variable QPixmap - Qt

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown