一個像我新的Qt和幾乎所有的教程中,我發現說使用setPixmap圖像添加到一個QLabel正確的方式()。也許這是正確的方式,但它不會是,因爲使用圖像標籤似乎超出了標籤的目的。顯示Qt中
誰能告訴我,如果有一個「正確的方式」或本一類特殊的,或者,如果將「標記方式」是正確的,不只是簡單的一個。
一個像我新的Qt和幾乎所有的教程中,我發現說使用setPixmap圖像添加到一個QLabel正確的方式()。也許這是正確的方式,但它不會是,因爲使用圖像標籤似乎超出了標籤的目的。顯示Qt中
誰能告訴我,如果有一個「正確的方式」或本一類特殊的,或者,如果將「標記方式」是正確的,不只是簡單的一個。
最簡單的方法是使用一個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);
使用QLabel是通常的方式來顯示的圖像QtWidgets基於UI。這可能確實感覺有點尷尬,因爲QLabel的API主要關注文本渲染。但是,它完成了這項工作,沒有其他課程專門用於繪製圖像。人們可以考慮編寫他自己的類(帶一個QPixmap,重新實現paintEvent(),sizeHint()),但如果QLabel缺少需要的功能,這對我來說纔有意義。 (QToolButton,QPushButton,...)中的圖像,圖形場景中的圖像(QGraphicsScene/View)等等,但是它們都依賴於上下文提供更專業或更復雜的用例。
要明確,您使用的是什麼「規範」的意思? (英語不是我的母語,所以我寧願確定你所說的而不是假設) – mFeinstein
「平常」,「直接前進」,「默認」 –
這裏是不是基於標籤的簡單類。我想這取決於你個人的感受是什麼,以及你需要做什麼。我更喜歡實現自己的類,以便稍後添加它(也許你想操縱圖像)。
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);
}
「因爲使用的標籤的圖像似乎超出標籤的目的。」 - >呃?對於這樣的簡單情況來說,這是正確的方法。我不認爲你檢查了這個文件和例子。這是'QLabel'的主要目的之一,即用例。 – lpapp
@LaszloPapp當我問這個問題,我不知道這...但它得到了回答3個月去通過Wagmare後,這是claer足夠了。請參閱所選答案下的評論。 – mFeinstein