QImage文件路径

3

我在文档中没有看到这个功能,所以它可能不存在,但以防万一:

我有一个函数,接受一个QImages向量作为参数。每个QImage都是从磁盘加载的,并且没有被编辑过 - 它只是读取而已。理想情况下,我想循环遍历所有QImages并将其文件路径输出到XML文件中。

不幸的是,我在文档中没有看到任何获取图像原始文件路径的方法。所以我的问题是,仅凭QImage,是否可以确定QImage最初从哪个文件路径加载,还是不行?

类似于:

QString QImage :: getOriginalFilepath();

我知道这可能是一个徒劳的问题,但是问一下总是值得一试的。

(顺便说一下,我正在使用Qt 4.7。)


1
一旦图像加载完成,它与加载来源无关。因此,不会保存有关文件路径的任何信息。 - Donotalo
3个回答

5
我查看了代码,似乎没有任何地方保存该信息。QImage::load(和构造函数)使用QImageReader(fileName,format)。read()然后将结果复制到自身中。 QImageReader设置为在完成阅读后删除设备表示(打开的文件对象)。
因此,总之,似乎不可能实现这一点。

4

我认为QImage似乎没有提供获取其路径的接口。我也认为这不是一个缺失的功能,因为没有必要将QImage绑定到特定的路径。在大多数情况下,QImage没有对应的物理文件。

所以,在您的情况下,最好的方法是子类化QImage并添加此功能:

class MyImage : public QImage {
   QString path_;
public:
   MyImage(const QString& path); 
   QString path(); // getter 
};

我省略了实现细节。

1
QImages不是QObjects,所以这个宏是错误的。我会使用一个结构体Foobar { QImage image; QString path; };来代替不必要的子类化。 - Frank Osterfeld
我认为在这里进行子类化是非常有用的,因为@quadelirus想要使用QImage的所有功能,而不仅仅是其中的一部分(在这种情况下,使用has-a关系可能更好)。我看不出使用结构体的好处,并且它的缺点是你总是需要编写foobar.image.xy() - WolfgangP
如果你不介意在你的结构体中使用 operator QImage&,那么在大多数情况下,你可以避免使用子类化和编写 foobar.image.xy() - andref

0
我通常会创建一个结构体来保存QImage和图像路径。
struct Image
{
    QImage imageData;
    QString filename;
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接