Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vipet от Октябрь 26, 2009, 12:31



Название: В MainWindow берется не та иконка
Отправлено: vipet от Октябрь 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 все ок


Название: Re: В MainWindow берется не та иконка
Отправлено: vipet от Октябрь 29, 2009, 00:06

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

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

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

Создал таск на трекере, но его пока не аппрувили


Название: Re: В MainWindow берется не та иконка
Отправлено: vipet от Октябрь 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 не отягащает


Название: Re: В MainWindow берется не та иконка
Отправлено: Alex Custov от Октябрь 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);

Без выделения памяти правильнее, оно тут не нужно


Название: Re: В MainWindow берется не та иконка
Отправлено: vipet от Октябрь 29, 2009, 02:12
в общем да