Russian Qt Forum
Ноябрь 25, 2024, 08:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа QDataStrem с QIcon  (Прочитано 4724 раз)
Waryable
Гость
« : Ноябрь 26, 2008, 12:57 »

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

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

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

inIcon <<icon;

fileIcon.close();
Файл-копия создается. Однако в его начало и конец добавляется некая информация. Я так понимаю, проблема заключается в том, что переменная типа QIcon содержит не только массив пикселей иконок, но и остальную информацию, например размер иконки, ее состояние и т.д.
Вручную "отсекать" ненужные биты не очень-то хотца. Требуется(если он существует) боле-мене простой способ обойти проблему.
Записан
EhTemka
Гость
« Ответ #1 : Ноябрь 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;           

Записан
Waryable
Гость
« Ответ #2 : Ноябрь 27, 2008, 08:22 »

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

Тут пришла мысля реализации через Buffer ByteArray...
Записан
BRE
Гость
« Ответ #3 : Ноябрь 27, 2008, 09:03 »

Так может работать/редактировать QPixmap, а когда понадобиться делать из него QIcon.
Записан
Waryable
Гость
« Ответ #4 : Ноябрь 27, 2008, 10:24 »

Так может работать/редактировать QPixmap, а когда понадобиться делать из него QIcon.

Да походу это тажа зопа, токо в профиль  Подмигивающий Я тут потыркался. И пришел к выводу, что проблема в записи любого изображения в файл через поток датастрим. Кто знает как оформить эту процедуру? Выручайте!  Улыбающийся
Записан
BRE
Гость
« Ответ #5 : Ноябрь 27, 2008, 11:29 »

Да походу это тажа зопа, токо в профиль  Подмигивающий Я тут потыркался. И пришел к выводу, что проблема в записи любого изображения в файл через поток датастрим. Кто знает как оформить эту процедуру? Выручайте!  Улыбающийся
QPixmap::save()
Записан
Waryable
Гость
« Ответ #6 : Ноябрь 27, 2008, 11:45 »

Цитировать
QPixmap::save()
Хехе. Я так и сделал. Только через QImage::save()  . Но всеравно спасибо.
Записан
EhTemka
Гость
« Ответ #7 : Ноябрь 27, 2008, 12:16 »

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

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

Ну так и не должен QIcon напрямую в конструкторе читать файл-копию, так как это не какой-нибудь jpeg или PNG, а просто файл с определенным форматом класса. Я же написал как этот файл считать в QIcon Непонимающий Так должно работать
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.