2010-12-17 6 views
36

Ich bin neu in Qt, und ich versuche, eine einfache GUI-Anwendung zu erstellen, die ein Bild anzeigt, sobald auf eine Schaltfläche geklickt wurde.Anzeige QImage mit QtGui

Ich kann das Bild in einem QImage Objekt lesen, aber gibt es eine einfache Möglichkeit, eine Qt-Funktion aufzurufen, die die QImage als Eingabe nimmt, und zeigt es an?

Antwort

6

Dank Alles, fand ich, wie es zu tun, die die gleiche wie Dave und Sergey ist:

ich bin mit QT Creator:

im Hauptfenster GUI erstellen Sie den Drag & Drop-GUI und erstellen Etikett (zB "myLabel")

In den Rückruf der Schaltfläche (angeklickt) gehen Sie wie folgt den (* ui) Zeiger auf die Schnittstelle Fenster Benutzer mit:

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); 
} 
2

Soweit ich weiß, QPixmap wird für die Anzeige von Bildern und QImage für das Lesen von ihnen verwendet. Es gibt QPixmap::convertFromImage() und QPixmap::fromImage() Funktionen zum Konvertieren von QImage.

10

Eine gängige Methode besteht darin, das Bild zu einem QLabel Widget mit QLabel::setPixmap() hinzuzufügen und dann das QLabel wie jedes andere Widget anzuzeigen. Beispiel:

#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(); 
} 
+1

Vielen Dank, das funktioniert sehr fein Ich habe es einfach in den Rückruf des Buttons verschoben. – Karim

63

Einfach, aber vollständiges Beispiel zeigt, wie QImage angezeigt werden könnte wie folgt aussehen:

#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(); 
} 
21

ein Bild Zeichnen einer QLabel scheint ein bisschen ein kludge mir verwenden. Mit neueren Versionen von Qt können Sie ein QGraphicsView Widget verwenden. Ziehen Sie in Qt Creator ein Graphics View Widget auf Ihre Benutzeroberfläche und nennen Sie es etwas (es heißt im folgenden Code). In mainwindow.h, fügen Sie so etwas wie die folgenden als private Variablen auf Ihre MainWindow Klasse:

QGraphicsScene *scene; 
QPixmap image; 

Dann mainwindow.cpp einfach bearbeiten und den Konstruktor so etwas wie dieses machen:

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); 
} 
+1

Danke. Ich habe mich über eine weniger kluge Art gefragt, es selbst zu machen. Vielleicht bin ich komisch, aber ich denke, ein Label sollte ein Label sein, kein Bild. – Tyler

+0

Dies scheint nicht sehr praktisch für die Anzeige von vielen Bildern pro Sekunde aber :( –