Russian Qt Forum

Qt => Общие вопросы => Тема начата: Waryable от Ноябрь 26, 2008, 12:57



Название: Работа QDataStrem с QIcon
Отправлено: Waryable от Ноябрь 26, 2008, 12:57
Проблема в том, что рабочий(не поврежденный) файл иконки проходя через QDataStrem становится не рабочим:
Код:
QIcon icon(путь к файлу иконки)

QFile fileIcon(путь к файлу-копии иконки);

QDataStream inIcon(&fileIcon);     
inIcon.setVersion(QDataStream::Qt_4_3);

inIcon <<icon;

fileIcon.close();
Файл-копия создается. Однако в его начало и конец добавляется некая информация. Я так понимаю, проблема заключается в том, что переменная типа QIcon содержит не только массив пикселей иконок, но и остальную информацию, например размер иконки, ее состояние и т.д.
Вручную "отсекать" ненужные биты не очень-то хотца. Требуется(если он существует) боле-мене простой способ обойти проблему.


Название: Re: Работа QDataStrem с QIcon
Отправлено: EhTemka от Ноябрь 26, 2008, 18:47
Если тебе нужно просто скопировать файл, то есть
bool QFile::copy ( const QString & fileName, const QString & newName )  [static]

А чтобы загрузить, то что ты создал, нужно делать так:

Код:

// запись в файл
QIcon icon(путь к файлу иконки)

QFile fileIcon(путь к файлу-копии иконки);

QDataStream inIcon(&fileIcon);     
inIcon.setVersion(QDataStream::Qt_4_3);

inIcon << icon;

fileIcon.close();

...

// чтение из ранее записанного файла
QFile fileIcon(путь к файлу-копии иконки);

fileIcon.open(QIODevice::ReadOnly);

QDataStream fromIcon(&fileIcon); 
 
QIcon icon;

fromIcon >> icon;           



Название: Re: Работа QDataStrem с QIcon
Отправлено: Waryable от Ноябрь 27, 2008, 08:22
EhTemka, копирование в чистом виде не совсем подходит для моей задачи. Предполагается, что в общем случае картинка берется не обязательно из файла. Иконка может создаваться путем ее рисования, либо редактирование ранее созданных. Т.е. не всегда будет существовать исходный файл, либо исходная иконка редактируется перед записью.
Спасибо за пример. Честно говоря пока не пробовал его на работоспособность, но после записи файла-копии метод QIcon icon(путь к файлу-копии иконки) не возращает валидной переменной icon. Проверял так: setWindowIcon(icon). Иконки у приложения не появлялось.

Тут пришла мысля реализации через Buffer ByteArray...


Название: Re: Работа QDataStrem с QIcon
Отправлено: BRE от Ноябрь 27, 2008, 09:03
Так может работать/редактировать QPixmap, а когда понадобиться делать из него QIcon.


Название: Re: Работа QDataStrem с QIcon
Отправлено: Waryable от Ноябрь 27, 2008, 10:24
Так может работать/редактировать QPixmap, а когда понадобиться делать из него QIcon.

Да походу это тажа зопа, токо в профиль  ;) Я тут потыркался. И пришел к выводу, что проблема в записи любого изображения в файл через поток датастрим. Кто знает как оформить эту процедуру? Выручайте!  :)


Название: Re: Работа QDataStrem с QIcon
Отправлено: BRE от Ноябрь 27, 2008, 11:29
Да походу это тажа зопа, токо в профиль  ;) Я тут потыркался. И пришел к выводу, что проблема в записи любого изображения в файл через поток датастрим. Кто знает как оформить эту процедуру? Выручайте!  :)
QPixmap::save()


Название: Re: Работа QDataStrem с QIcon
Отправлено: Waryable от Ноябрь 27, 2008, 11:45
Цитировать
QPixmap::save()
Хехе. Я так и сделал. Только через QImage::save()  . Но всеравно спасибо.


Название: Re: Работа QDataStrem с QIcon
Отправлено: EhTemka от Ноябрь 27, 2008, 12:16
EhTemka, копирование в чистом виде не совсем подходит для моей задачи. Предполагается, что в общем случае картинка берется не обязательно из файла. Иконка может создаваться путем ее рисования, либо редактирование ранее созданных. Т.е. не всегда будет существовать исходный файл, либо исходная иконка редактируется перед записью.
Спасибо за пример. Честно говоря пока не пробовал его на работоспособность, но после записи файла-копии метод QIcon icon(путь к файлу-копии иконки) не возращает валидной переменной icon. Проверял так: setWindowIcon(icon). Иконки у приложения не появлялось.

Тут пришла мысля реализации через Buffer ByteArray...

Ну так и не должен QIcon напрямую в конструкторе читать файл-копию, так как это не какой-нибудь jpeg или PNG, а просто файл с определенным форматом класса. Я же написал как этот файл считать в QIcon ??? Так должно работать