【问题标题】:QImage file pathQImage文件路径
【发布时间】:2010-10-05 15:33:07
【问题描述】:

我在任何地方的文档中都没有看到这个,所以它可能不存在,但以防万一:

我有一个函数,它接受一个 QImages 向量作为参数。每个 QImage 在某个时候从磁盘加载并且没有被编辑 - 它只是从中读取。理想情况下,我想做的是遍历所有 QImage 并将它们的文件路径列表输出到 XML 文件。

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

类似的东西:

QString QImage::getOriginalFilepath();

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

(顺便说一下,我使用的是 Qt 4.7。)

【问题讨论】:

  • 一旦图像被加载,它与加载位置无关。因此不会保存有关文件路径的信息。

标签: c++ qt qimage


【解决方案1】:

我查看了代码,但该信息似乎没有保存在任何地方。 QImage::load (和构造函数)使用 QImageReader(fileName,format).read() 然后将结果复制到自身。 QImageReader 设置为在完成读取后立即删除设备表示(打开的文件对象)。

所以,总而言之,这似乎是不可能的。

【讨论】:

    【解决方案2】:

    对我来说,QImage 似乎没有提供获取其路径的接口。我也认为这不是缺少的功能,因为不需要将 QImage 绑定到特定路径。在大多数用例中,QImage 没有对应的物理文件。

    因此,在您的情况下,最好的方法是继承 QImage 并添加此功能:

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

    我省略了实现细节。

    【讨论】:

    • QImages 不是 QObjects,所以宏是错误的。我也会使用 struct Foobar { QImage image; QString 路径; };相反,或者类似的,而不是不必要的子类化。
    • 我认为这里的子类化绝对有用,因为@quadelirus 想要使用 QImage 的所有功能,而不仅仅是它的子集(在这种情况下,has-a 关系会更好)。我看不出使用结构没有任何好处,而且它的缺点是你总是必须写foobar.image.xy()
    • 如果您不害怕结构中的operator QImage&,则可以避免子类化和编写foobar.image.xy()(在大多数情况下)。
    【解决方案3】:

    我通常创建一个结构来保存 QImage 和图像路径。

    struct Image
    {
        QImage imageData;
        QString filename;
    };
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2018-09-29
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 2012-12-14
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多