12 votes

Qt Graphics Vue , afficher l'image ! , Widget

Voici mon code :

void MainWindow::on_actionOpen_Image_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this,"Ouvrir un fichier d'image",QDir::currentPath());

    if(!fileName.isEmpty())
    {
        QImage image(fileName);

        if(image.isNull())
        {
            QMessageBox::information(this,"Visionneuse d'images","Erreur d'affichage de l'image");
            return;
        }

        QGraphicsScene scene;
        QGraphicsView view(&scene);
        QGraphicsPixmapItem item(QPixmap::fromImage(image));
        scene.addItem(&item);
        view.show();   
    }

}

Je veux afficher une image à partir d'un fichier, le code fonctionne bien mais l'image disparaît très rapidement.

Comment puis-je mettre en pause l'affichage de l'image?

Et comment puis-je charger une image dans le widget "graphicsView"?

Mon code :

void MainWindow::on_actionOpen_Image_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this,"Ouvrir un fichier d'image",QDir::currentPath());

    if(!fileName.isEmpty())
    {
        QImage image(fileName);

        if(image.isNull())
        {
            QMessageBox::information(this,"Visionneuse d'images","Erreur d'affichage de l'image");
            return;
        }

        QGraphicsScene scene;
        QGraphicsPixmapItem item(QPixmap::fromImage(image));
        scene.addItem(&item);

        ui->graphicsView->setScene(&scene);
        ui->graphicsView->show();    
    }
}

Cela ne fonctionne pas.

Comment corriger cela?

23voto

this.lau_ Points 23290

Vous devez créer tous vos objets sur le tas, sinon ils seront supprimés lorsque leur portée se termine:

QGraphicsScene* scene = new QGraphicsScene();
QGraphicsView* view = new QGraphicsView(scene);
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene->addItem(item);
view->show();

Votre deuxième question pourrait être liée - scene est assigné à ui->graphicsView mais il est supprimé immédiatement après, donc encore une fois créez tous vos objets sur le tas.

7voto

Cornelis Points 113

Si vous n'êtes pas obligé de rester avec QGraphicsView, une possibilité est d'utiliser QLabel à la place. Je n'ai pas réussi à le résoudre pour QGraphicsView...

QString filename = "X:/mon_image";
QImage image(filename);
ui->label->setPixmap(QPixmap::fromImage(image));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X