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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как установить одинаковый размер иконок (16x16 px) сразу для всего приложения?  (Прочитано 5217 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Декабрь 04, 2014, 21:27 »

Мне нужно иметь единую точку управления размером иконок, используемых в приложении.

Однако в настоящий момент у меня в коде после каждого создания каждого тулбара прописано:

Код:
QSize toolBarIconSize(16,16);
toolsLine->setIconSize(toolBarIconSize);

В связи с чем два вопроса:

1. Хотелось бы избавиться от setIconSize() возле каждого места создания тулбара или отдельной кнопки, и задать размер иконок только один раз в приложении. Можно ли это сделать?

2. Так как приложение кроссплатформенное (Linux, Win, Android) и используется на мониторах с разным размером пикселя, физические размеры иконки в 16x16 пикселей могут быть разными: и ~2 mm (ретина) и ~8 mm (обычный старенький монитор). Как установить размер иконок не в пикселях, а в миллиметрах? Или в каких-нибудь других величинах (пунктах, pt), привязанных к физическому миру?
Записан

Собираю информацию по крупицам
http://webhamster.ru
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Декабрь 04, 2014, 21:56 »

использовать css?
Записан

ArchLinux x86_64 / Win10 64 bit
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Декабрь 05, 2014, 00:25 »

1. Ну и как через qt-шный CSS изменить размеры всех ИКОНОК?

2. В qt-шном css отсутствуют миллиметры.

И у меня не получилось работать с pt - тоже не работают, хотя в документации написано что пункты должны поддерживаться.

Работают только пиксели.
Записан

Собираю информацию по крупицам
http://webhamster.ru
vregess
Гость
« Ответ #3 : Декабрь 05, 2014, 08:31 »

Digia говорит, что начиная с 5-ой версии Qt device independent pixels (именно в них указываются размеры).
Если задача стоит в выборе другой иконки для ретины, то можно просто создавать 2 версии иконок:
Код:
foo.png
foo@2x.png

а далее просто

Код
C++ (Qt)
QIcon icon("foo.png");
 
(это должно работать в одной из последних 4.8, т.к. портировали из 5-ой).

Подробности тут: Retina display support for Mac OS, iOS and X11.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Декабрь 05, 2014, 13:51 »

У меня все иконки векторные в SVG. А ты про PNG говоришь.

Задача простая - установить размер иконок в приложении один раз где-нибудь в инициализации.

Как это сделать?
Записан

Собираю информацию по крупицам
http://webhamster.ru
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Декабрь 05, 2014, 14:13 »

Код
CSS
QToolButton { icon-size: 16px; /* maximum icon size */ }
 

не работает? Можно попробовать подставить pt вместо px и посмотреть.
Записан

ArchLinux x86_64 / Win10 64 bit
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #6 : Декабрь 05, 2014, 14:42 »

Код
CSS
QToolButton { icon-size: 16px; /* maximum icon size */ }
 

не работает? Можно попробовать подставить pt вместо px и посмотреть.

Работает. Для QToolButton. Для других элементов отдельно нужно указывать.

Но смотри вопрос №2. В пикселях на разных экранах получаем очень разные результаты. В QSS нет поддержки mm, а в pt почему-то не работает.
Записан

Собираю информацию по крупицам
http://webhamster.ru
vregess
Гость
« Ответ #7 : Декабрь 05, 2014, 16:09 »

А ты пробовал qApp->setAttribute(Qt::AA_UseHighDpiPixmaps) ?

Цитировать
Make QIcon::pixmap() generate high-dpi pixmaps that can be larger than the requested size. Such pixmaps will have devicePixelRatio set to a value higher than 1.

По идее QIcon на ретине должен создать из SVG изображение большего размера.


Ну а так, встроенного способа вроде нет. Только самому городить, если это не поможет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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