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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: В MainWindow берется не та иконка  (Прочитано 4140 раз)
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« : Октябрь 26, 2009, 12:31 »

Qt 4.6 beta, MS VS 2008 SP1

Создаем Qt4 GUI Application

Есть иконка app.ico c картинками 16x16, 32x32, 48x48, 256x256, все 32 бита,

В app.rc:
IDI_ICON1 ICON DISCARDABLE "app.ico"

В app.pro:
win32:RC_FILE = app.rc

Компилим, запускаем - и в заголовке окна вместо иконки 16х16 видим какую-то из иконок большего размера, смаштабированную до 16х16

-----

В 4.5.x все ок
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #1 : Октябрь 29, 2009, 00:06 »


Если делать вручную setWindowIcon() - то же самое.

Если же делаем setWindowIcon() с иконкой, где только одно изображение 16х16, то все ок. Но тогда при переключении по Alt-Tab видим, естественно, эту же 16х16 увеличенную в 2 раза (как полагается, со "ступеньками").

В сорцах Qt не копался

Создал таск на трекере, но его пока не аппрувили
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #2 : Октябрь 29, 2009, 00:31 »


Проблема полностью решается следующим способом:

Иконку приложения устанавливаем как обычно (через .rc файл)

А чтобы в заголовке окна и при переключении по Alt-Tab были нормальные изображения подгружаем картинки из отдельных файлов (а не из одного .ico):
Код:
ico = new QIcon();
ico->addFile(":/img/appicon16", QSize(16, 16));
ico->addFile(":/img/appicon32", QSize(32, 32));
setWindowIcon(*ico);

(appicon16 и 32 - алиасы .png файлов из .qrc)

P.S. Должно быть можно извлечь 16х16 и 32х32 картинки из иконки в ресурсах программы, но я не заморачивался, дополнительный вес екзешника в 4Kb не отягащает
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Октябрь 29, 2009, 00:56 »

Код:
ico = new QIcon();
ico->addFile(":/img/appicon16", QSize(16, 16));
ico->addFile(":/img/appicon32", QSize(32, 32));
setWindowIcon(*ico);

Код:
QIcon ico;
ico.addFile(":/img/appicon16", QSize(16, 16));
ico.addFile(":/img/appicon32", QSize(32, 32));
setWindowIcon(ico);

Без выделения памяти правильнее, оно тут не нужно
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #4 : Октябрь 29, 2009, 02:12 »

в общем да
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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