2013-10-29 39 views
2

一個像我新的Qt和幾乎所有的教程中,我發現說使用setPixmap圖像添加到一個QLabel正確的方式()。也許這是正確的方式,但它不會是,因爲使用圖像標籤似乎超出了標籤的目的。顯示Qt中

誰能告訴我,如果有一個「正確的方式」或本一類特殊的,或者,如果將「標記方式」是正確的,不只是簡單的一個。

+0

「因爲使用的標籤的圖像似乎超出標籤的目的。」 - >呃?對於這樣的簡單情況來說,這是正確的方法。我不認爲你檢查了這個文件和例子。這是'QLabel'的主要目的之一,即用例。 – lpapp

+0

@LaszloPapp當我問這個問題,我不知道這...但它得到了回答3個月去通過Wagmare後,這是claer足夠了。請參閱所選答案下的評論。 – mFeinstein

回答

2

最簡單的方法是使用一個QLabel.in圖像瀏覽器實例 http://qt-project.org/doc/qt-4.8/widgets-imageviewer.html它們,請使用QLabel ..

另一種方式

QGraphicsView view(&scene); 
    QGraphicsPixmapItem item(QPixmap("c:\\test.png")); 
    scene.addItem(&item); 
+1

QGraphicsView方法似乎對簡單的圖像略微矯枉過正... –

+1

同意。 'QGraphicsView'具有許多強大的功能,如果您只需要顯示圖像就不需要或不使用。 'QLabel'將是比較合適的,因爲儘管它的名稱可能暗示它的主要目的是爲文本,它的實際目的是成爲一個重量輕'QWidget'用於只讀目的。即它用於顯示用戶信息,幾乎沒有代碼來處理用戶事件,如點擊。 – RobbieE

+0

說得好..to顯示qlabel一個簡單的圖像.. – Wagmare

4

使用QLabel是通常的方式來顯示的圖像QtWidgets基於UI。這可能確實感覺有點尷尬,因爲QLabel的API主要關注文本渲染。但是,它完成了這項工作,沒有其他課程專門用於繪製圖像。人們可以考慮編寫他自己的類(帶一個QPixmap,重新實現paintEvent(),sizeHint()),但如果QLabel缺少需要的功能,這對我來說纔有意義。 (QToolButton,QPushButton,...)中的圖像,圖形場景中的圖像(QGraphicsScene/View)等等,但是它們都依賴於上下文提供更專業或更復雜的用例。

+0

要明確,您使用的是什麼「規範」的意思? (英語不是我的母語,所以我寧願確定你所說的而不是假設) – mFeinstein

+0

「平常」,「直接前進」,「默認」 –

2

這裏是不是基於標籤的簡單類。我想這取決於你個人的感受是什麼,以及你需要做什麼。我更喜歡實現自己的類,以便稍後添加它(也許你想操縱圖像)。

imagewidget.h

#ifndef IMAGEWIDGET_H 
#define IMAGEWIDGET_H 

#include <QPainter> 
#include <QImage> 
#include <QWidget> 

QT_BEGIN_NAMESPACE 
class QPainter; 
class QImage; 
QT_END_NAMESPACE 

class ImageWidget : public QWidget 
{ 
    Q_OBJECT 

public: 
    ImageWidget(const QString &filename, QWidget* parent = 0); 
    ~ImageWidget(); 

    bool load(const QString &fileName); 
    bool save(const QString &fileName); 

protected: 
    void paintEvent(QPaintEvent* event); 

private: 
    QImage img; 
}; 

#endif 

imagewidget.cpp

#include <QDebug> 
#include "imagewidget.h" 

ImageWidget::ImageWidget(const QString &filename, QWidget* parent) : QWidget(parent) 
{ 
    img.load(filename); 

    setMinimumWidth(img.width()); 
    setMinimumHeight(img.height()); 
    setMaximumWidth(img.width()); 
    setMaximumHeight(img.height()); 

    this->show(); 
} 

bool ImageWidget::load(const QString &fileName) 
{ 
    img.load(fileName); 
    return true; 
} 

bool ImageWidget::save(const QString &fileName) 
{ 
    img.save(fileName, "PNG"); 
    return true; 
} 

ImageWidget::~ImageWidget() 
{ 
} 

void ImageWidget::paintEvent(QPaintEvent*) 
{ 
    QPainter painter(this); 
    painter.setViewport(0, 0, width(), height()); 
    painter.setWindow(0, 0, width(), height()); 
    painter.drawImage(0, 0, img); 
}