Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qt creator QPixmap graphicsView

Comment ajouter un QPixmap dans un graphicsview

Sujet résolu
    11 août 2022 à 20:54:50

    Bonjour à tous !

    En 2 ans de pratique de Qt creator, je suis bloqué, je n'ai pas trouvé d'aide même en anglais pour mon souci.

    TOPO : je souhaite faire un jeu 2D basique avec un vaisseau spatiale. Première chose, charger mon vaisseau, j'ai un jpg d'un vaisseau, je me dis que je vais l'ouvrir sans utiliser l'explorateur de fichier comme tous les jeux.

    Ma scene, avec l'initialisation dans le .h et l'allocation dynamique dans le constructeur .cpp pas besoin de le montrer c'est niquel.

    Ensuite, le QPixmap qui est dans une méthode que j'appelle dans le constructeur.

    Le souci étant que rien ne se produit, l'image ne se charge pas pourtant le chemin d'accès est bon et j'ajoute bien un QPixmap à ma scène comme si j'ajoutais un rectangle en faisant rectangle = scene.addRect... La seule solution que j'ai pour ouvrir mon QPixmap est de passer par fileopen pour l'explorateur de fichier. Or, je ne veux pas devoir procéder comme cela, puisqu'un joueur n'est pas censé faire ca. Puis est-ce que je perd mon temps ou non ? Car mon but étant de pouvoir faire bouger ce QPixmap monVaisseau avec keyPressEvent(QEvent *event). Peut-on insérer un QLabel dans un QGraphicsView et ensuite le faire bouger avec un setpos(), pos(), position() ou encore move() ? Quelles seraient les solutions envisageables ?

    scene->setSceneRect(50, 50, 300, 300);
        ui->graphicsView->setScene(scene);
        ui->graphicsView->setStyleSheet("background-color: #1A2D54");
     QPixmap monVaisseau;
        monVaisseau.load("C:/Users/Dell/Pictures/logo-Jeu/vaisseau.jpg");
        ui->graphicsView->setRenderHints(QPainter::Antialiasing);
        scene->addPixmap(monVaisseau);
    QString monVaisseau;
        QPixmap image;
    
        monVaisseau = QFileDialog::getOpenFileName(this, tr("Explorateur de fichier"), ".",
                     tr("Image Files (*.png *.jpg *.bmp"));
        if (QString::compare(monVaisseau, QString()) != 0)
        {
    
            bool valid = image.load(monVaisseau);
    
            if (valid)
            {
    
                QMessageBox::information(nullptr, "Image Chargée", "Votre image a bien été ouverte");
    
                ui->graphicsView->setRenderHint(QPainter::Antialiasing); //lisser l'image
                ui->graphicsView->setScene(scene);
    
                //image = image.scaledToWidth(ui->graphicsView->width(), Qt::SmoothTransformation); //mettre l'image à l'échelle (largeur)
                //image = image.scaledToHeight(ui->graphicsView->height(), Qt::SmoothTransformation); //mettre l'image à l'échelle (hauteur)
    
                scene->setSceneRect(0, 0, image.width(), image.height());
                scene->addPixmap(image);
    
            }
        }
        else {
            QMessageBox::critical(nullptr, "Erreur Image non chargée", "Votre image ne s'est pas ouverte");
        }
     

     

    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2022 à 13:11:17

      Bonjour

      Et si tu utilisais QGraphicsPixmapItem Class | Qt Widgets 5.15.10?

       Genre: 

      QPixmap monVaisseau;
      monVaisseau.load("C:/Users/Dell/Pictures/logo-Jeu/vaisseau.jpg");
      QGraphicsPixmapItem *item = new QGraphicsPixmapItem(monVaisseau);
      scene->addItem(item);
      • Partager sur Facebook
      • Partager sur Twitter
        12 août 2022 à 16:50:22

        Asmita je te remercie énormément je sais pas pourquoi je n’y ai pas pensé plus tôt ! Merci de ta réponse j’ai pu finir mon jeu grâce à ça c’est pile la solution, je met en résolu !
        • Partager sur Facebook
        • Partager sur Twitter

        Qt creator QPixmap graphicsView

        × 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