2010-12-17 12 views
36

Jestem nowy w Qt i próbuję stworzyć prostą aplikację GUI, która wyświetla obraz po kliknięciu przycisku.Wyświetl QImage z QtGui

Mogę odczytać obraz z obiektu QImage, ale czy istnieje jakiś prosty sposób wywołania funkcji Qt, która pobiera QImage jako dane wejściowe i wyświetla ją?

Odpowiedz

6

Dzięki wszystkim, znalazłem jak to zrobić, który jest taki sam jak Dave i Sergey:

Używam Qt Creator:

W głównym oknie GUI utworzyć za pomocą interfejsu GUI drag drop i stworzyć etykietę (na przykład "myLabel")

W zwrotnego od przycisku (kliknięte) należy wykonać następujące czynności za pomocą (* UI) wskaźnik do okna interfejsu użytkownika:

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

Z tego co wiem, QPixmap służy do wyświetlania obrazów i QImage do ich odczytu. Istnieją funkcje QPixmap::convertFromImage() i QPixmap::fromImage() do konwersji z QImage.

10

Jednym z typowych sposobów jest dodanie obrazu do widgetu QLabel przy użyciu QLabel::setPixmap(), a następnie wyświetlenie QLabel, tak jak w przypadku każdego innego widżetu. Przykład:

#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

Wielkie dzięki, to działa bardzo dobrze , Właśnie przeniosłem to wewnątrz wywołania zwrotnego przycisku. – Karim

63

prosty, ale kompletny przykład pokazujący, jak wyświetlać QImage może wyglądać następująco:

#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

Rysowanie obrazu z wykorzystaniem QLabel Wygląda trochę kludge do mnie. W nowszych wersjach Qt możesz użyć widgetu QGraphicsView. W Qt Creator przeciągnij widżet Graphics View na swój interfejs użytkownika i nadaj mu nazwę (w kodzie poniżej jest to). W mainwindow.h, dodać coś jak następujących jak private zmiennych klasy MainWindow:

QGraphicsScene *scene; 
QPixmap image; 

Następnie wystarczy edytować mainwindow.cpp i zrobić coś konstruktora takiego:

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

Dzięki. Zastanawiam się nad mniej kludowym sposobem zrobienia tego sam. Może jestem dziwny, ale myślę, że etykieta powinna być etykietą, a nie obrazem. – Tyler

+0

Nie wydaje się to jednak bardzo wygodne w przypadku wyświetlania dużej liczby obrazów na sekundę :( –