将图像分配给从Qimage继承的类的对象

时间:2014-04-18 14:33:02

标签: c++ qt qstring qtgui qimage

我创建了一个继承自Qimage的类BWImage。因此,类的对象是Qimage类型。用以下内容创建对象后

BWImage image1;

现在如何将实际图像(已在资源结构中)分配给此对象?我没试过就试过这个:

image1 = QImage(":/lena.png"); 

作为我正在做的事情的概述:使用我可以调用的函数创建一个图像类来执行傅里叶变换等。

2 个答案:

答案 0 :(得分:2)

您不能将基类的对象分配给派生的对象。

你的BWImage应该提供一个接受文件名的构造函数,并调用QImage构造函数。

BWImage(QString filename) 
  : QImage(filename) 
{
}

答案 1 :(得分:1)

这里从QImage继承此功能是一个坏主意,因为您将使您的类具有Image所具有的所有公共接口方法。

这意味着您的最终用户将拥有一系列可用于调用的方法,而您似乎只希望允许他们调用方法来执行算法,例如:上述傅里叶变换。我建议改为使用QImage成员。这也被称为“has-a”而不是“is-a”关系。

无论哪种方式,您都需要使用构造函数或方法来设置QImage文件名。我会写这样的东西:

imagehandler.h

#include <QImage>
#include <QDebug>

class ImageHandler
{
public:
    ImageHandler(const QString &fileName)
        : m_image(fileName)
    {
        ...
    }

    // Or just use an explicit method like this
    void loadImage(const QString &fileName)
    {
        if (!m_image.load(fileName)
            qDebug() << "Failed to load the image from file:" << fileName;
    }
    ...
private:
    QImage m_image;
}