2010-10-05 20 views
2

Я не вижу этого в документации в любом месте, так что, вероятно, не существует, но только в том случае:QImage путь к файлу

У меня есть функция, которая принимает в качестве параметра вектор QImages. Каждый QImage загружался с диска в какой-то момент и не редактировался - он просто читается. В идеале, что я хотел бы сделать, это цикл по всем QImages и вывод списка их путей к файлу XML.

К сожалению, я не вижу в документации какой-либо способ получить исходный путь к файлу, из которого было загружено изображение. Поэтому мой вопрос: возможно ли, учитывая только QImage, выяснить, какой путь к файлу был загружен QImage или нет?

Что-то вдоль линий:

QString QImage :: getOriginalFilepath();

Я знаю, что это, вероятно, бесполезный вопрос, но его всегда стоит попробовать спросить, я полагаю.

(Я использую Qt 4.7, кстати.)

+1

После загрузки изображения он не имеет отношения к месту его загрузки. поэтому информация о пути файла не сохраняется. – Donotalo

ответ

4

Я посмотрел через код, и эта информация не отображается для сохранения в любом месте. QImage :: load (и конструктор) использует QImageReader (имя_файла, формат) .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; }; вместо этого, или somesuch, вместо ненужного подкласса. –

+0

Спасибо за подсказку. – WolfgangA

+0

Я думаю, что подклассы здесь абсолютно полезны, потому что @quadelirus хочет использовать все функции QImage, а не только его подмножество (в этом случае отношение has-a будет лучше). Я не вижу преимущества использования структуры, и у нее есть недостаток, который вам всегда нужно написать 'foobar.image.xy()'. – WolfgangA

0

Обычно я создаю структуру для удержания QImage и пути изображения.

struct Image 
{ 
    QImage imageData; 
    QString filename; 
};