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

Posted

技术标签:

【中文标题】将图像分配给从 Qimage 继承的类的对象【英文标题】:Assigning an image to an object of a class that inherits from Qimage 【发布时间】:2014-04-18 14:33:01 【问题描述】:

我创建了一个继承自 Qimage 的类 BWImage。因此,该类的对象属于 Qimage 类型。创建对象后:

BWImage image1;

我现在如何为这个对象分配一个实际的图像(已经在资源结构中)?我试过这个没有运气:

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

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

【问题讨论】:

创建一个为你工作的构造函数。请参阅此question 了解更多信息。 作为初学者,我使用的是基本的 c++。另外,作为一个初学者,知道我的想法很愚蠢并且我应该使用组合而不是聚合对我没有多大帮助。建议的代码,有帮助。 【参考方案1】:

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

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

BWImage(QString filename) 
  : QImage(filename) 


【讨论】:

【参考方案2】:

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

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

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

图像处理程序.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;

【讨论】:

以上是关于将图像分配给从 Qimage 继承的类的对象的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Swift 中一次将委托分配给同一类的多个对象?

Squeryl - HikariCP - mySql - 将读取流量分配给从站

何时为 C++ 中的类的成员函数分配内存空间?

当我们复制/分配派生类对象时,如何在继承中复制基类成员?

对象的创建过程以及super关键字的使用

具有显式初始化程序的类的内存分配