web-dev-qa-db-fra.com

Afficher QImage avec QtGui

Je suis nouveau sur Qt et j'essaie de créer une application graphique simple qui affiche une image une fois qu'un bouton a été cliqué.

Je peux lire l'image dans un objet QImage, mais existe-t-il un moyen simple d'appeler une fonction Qt qui prend le QImage comme entrée et l'affiche?

40
Karim

Merci à tous, j'ai trouvé comment le faire, ce qui est le même que Dave et Sergey:

J'utilise QT Creator:

Dans la fenêtre principale de l'interface graphique, créez à l'aide de l'interface graphique de glisser-déposer et créez une étiquette (par exemple, "myLabel")

Dans le rappel du bouton (cliqué), procédez comme suit en utilisant le pointeur (* ui) vers la fenêtre de l'interface utilisateur:

void MainWindow::on_pushButton_clicked()
{
     QImage imageObject;
     imageObject.load(imagePath);
     ui->myLabel->setPixmap(QPixmap::fromImage(imageObject));

     //OR use the other way by setting the Pixmap directly

     QPixmap pixmapObject(imagePath");
     ui->myLabel2->setPixmap(pixmapObject);
}
6
Karim

Un exemple simple mais complet montrant comment afficher QImage pourrait ressembler à ceci:

#include <QtGui/QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QImage myImage;
    myImage.load("test.png");

    QLabel myLabel;
    myLabel.setPixmap(QPixmap::fromImage(myImage));

    myLabel.show();

    return a.exec();
}
67
Palmik

Dessiner une image à l'aide d'un QLabel me semble un peu compliqué. Avec les nouvelles versions de Qt, vous pouvez utiliser un widget QGraphicsView. Dans Qt Creator, faites glisser un Graphics View widget sur votre interface utilisateur et nommez-le quelque chose (il est nommé mainImage dans le code ci-dessous). Dans mainwindow.h, ajoutez quelque chose comme ce qui suit en tant que variables private à votre classe MainWindow:

QGraphicsScene *scene;
QPixmap image;

Ensuite, modifiez simplement mainwindow.cpp et rendre le constructeur quelque chose comme ceci:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    image.load("myimage.png");
    scene = new QGraphicsScene(this);
    scene->addPixmap(image);
    scene->setSceneRect(image.rect());

    ui->mainImage->setScene(scene);
}
23
Scott Griffiths

Une façon courante consiste à ajouter l'image à un widget QLabel à l'aide de QLabel::setPixmap(), puis à afficher le QLabel comme vous le feriez pour tout autre widget. Exemple:

#include <QtGui>

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  QPixmap pm("your-image.jpg");
  QLabel lbl;
  lbl.setPixmap(pm);
  lbl.show();
  return app.exec();
}
12
Dave Mateer

Pour autant que je sache, QPixmap est utilisé pour afficher les images et QImage pour les lire. Il existe des fonctions QPixmap::convertFromImage() et QPixmap::fromImage() à convertir à partir de QImage.

3
Sergei Tachenov