Как в Qt сделать DecorationRole, зависящую от DPI экрана?
Qt Widgets. Есть какой-нибудь QListBox или QComboBox с «виртуальной» моделью.
Как оно работает? Получив параметр DecorationRole, функция data() выдаёт картинку, которую надо отобразить рядом с текстом.
А вот что делать, если картинка синтезируемая? Отойти от DecorationRole и рисовать с нуля как-то не хочется. Рисовать на всех возможных DPI и собирать в QIcon тоже не хочется.
1. Нашему QListBox’у задаём setIconSize в дипелях.
2. В data(Qt::DecorationRole) использовать конструктор QIcon(QIconEngine*). Система переводит дипели в пиксели, и работает QIconEngine — объект, содержащий кучу кода и немножко данных, призванный синтезировать иконку нужного размера в аппаратных пикселях.
Если нужны ещё и разные размеры иконы — патчить QStyledItemDelegate.initStyleOption. Вероятно, тоже в дипелях (не проверял).