Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将图像指定给从Qimage继承的类的对象_C++_Qt_Qstring_Qtgui_Qimage - Fatal编程技术网

C++ 将图像指定给从Qimage继承的类的对象

C++ 将图像指定给从Qimage继承的类的对象,c++,qt,qstring,qtgui,qimage,C++,Qt,Qstring,Qtgui,Qimage,我已经创建了一个从Qimage继承的类BWImage。因此,类的对象是Qimage类型。创建对象后,请执行以下操作: BWImage image1; 现在如何将实际图像(已在资源结构中)分配给此对象?我试过这个,但运气不好: image1 = QImage(":/lena.png"); 作为我所做工作的概述:创建一个带有函数的图像类,我可以调用这些函数来执行傅立叶变换等。您不能将基类的对象指定给派生对象 BWMAGE应该提供一个接受文件名的构造函数,并调用QImage构造函数 BWImag

我已经创建了一个从Qimage继承的类BWImage。因此,类的对象是Qimage类型。创建对象后,请执行以下操作:

BWImage image1;
现在如何将实际图像(已在资源结构中)分配给此对象?我试过这个,但运气不好:

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

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

您不能将基类的对象指定给派生对象

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

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

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

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

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

imagehandler.h
#包括
#包括
类ImageHandler
{
公众:
ImageHandler(常量QString和文件名)
:m_图像(文件名)
{
...
}
//或者使用这样一个显式的方法
void loadImage(常量QString和文件名)
{
如果(!m_image.load)(文件名)

创建一个为你工作的构造函数。请参阅更多信息。作为初学者,C++是我使用的。而且,作为初学者,知道我的想法是愚蠢的,我应该使用构图而不是聚合。这有助于我。
#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;
}