在Qt中显示图像的正确方法

时间:2013-10-29 05:52:08

标签: c++ image qt label

我是Qt的新手,几乎每个我发现的教程都说使用setPixmap()将图像添加到QLabel。也许这是正确的方法,但它并不是一种感觉,因为对图像使用标签似乎超出了标签的目的。

有人能告诉我是否有正确的方法"或者特殊类别,或者标签方式"是正确的,而不仅仅是简单的。

3 个答案:

答案 0 :(得分:4)

使用QLabel是在基于QtWidgets的UI中显示图像的常用方法。这可能确实感觉有点尴尬,因为QLabel的API主要关注文本呈现。但是,它完成了这项工作,并没有其他专门用于绘制图像的课程。人们可以考虑编写自己的类(使用QPixmap,重新实现paintEvent(),sizeHint()),但只有在需要QLabel缺乏的功能时才能对我有意义。

当然还有许多其他方法来绘制图像,具体取决于上下文,如按钮上的图像(QToolButton,QPushButton,...),图形场景中的图像(QGraphicsScene / View)等,但它们都可以提供更专业或更复杂的用例。

答案 1 :(得分:2)

最简单的方法是使用QLabel.in ImageViewer示例  http://qt-project.org/doc/qt-4.8/widgets-imageviewer.html他们使用QLabel ..

另一种方式

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

答案 2 :(得分: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);
}