@Mercury13
Программист на «си с крестами» и не только

Как в Qt сделать DecorationRole, зависящую от DPI экрана?

Qt Widgets. Есть какой-нибудь QListBox или QComboBox с «виртуальной» моделью.

Как оно работает? Получив параметр DecorationRole, функция data() выдаёт картинку, которую надо отобразить рядом с текстом.

А вот что делать, если картинка синтезируемая? Отойти от DecorationRole и рисовать с нуля как-то не хочется. Рисовать на всех возможных DPI и собирать в QIcon тоже не хочется.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@Mercury13 Автор вопроса
Программист на «си с крестами» и не только
Опять приходится отвечать самому.

1. Нашему QListBox’у задаём setIconSize в дипелях.
2. В data(Qt::DecorationRole) использовать конструктор QIcon(QIconEngine*). Система переводит дипели в пиксели, и работает QIconEngine — объект, содержащий кучу кода и немножко данных, призванный синтезировать иконку нужного размера в аппаратных пикселях.

Если нужны ещё и разные размеры иконы — патчить QStyledItemDelegate.initStyleOption. Вероятно, тоже в дипелях (не проверял).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы