我是Qt的新手,几乎每个我发现的教程都说使用setPixmap()将图像添加到QLabel。也许这是正确的方法,但它并不是一种感觉,因为对图像使用标签似乎超出了标签的目的。
有人能告诉我是否有正确的方法"或者特殊类别,或者标签方式"是正确的,而不仅仅是简单的。
答案 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);
}