В продолжение темы анимации.
Поставить анимированную иконку в трей, в принципе, легко. Тоже самое как и с рисованием на виджете - таймер + QSystemTray::setIcon() в цикле.
Я пошел дальше. Рисую painter'ом на QImage, потом перевожу QImage в QPixmap, а его уже передаю в setIcon. Иначе никак. Проблема возникает, когда тебе в документации прямо говорят, что размеры иконки в винде и иксах - разные. Винда 16x16, иксы - 22x22. Ну да ладно, размеры получаются таким вызовом: tray.geometry().size()
Под эти размеры нужно подогнать некоторое изображение (QImage). Стало быть тут два варианта:
я думаю тему стоит переименовать, т.к. суть не про системный лоток (tray), а про рисование/сглаживание
В общем все сводится к тому, чтобы узнать размер шрифта по максимальной ширине символа.
Пока, кроме тупого перебора всех высот замеряя ширину символа, ничего в голову не приходит.
---
В общем сделал по принципу Aspect Ratio. Если количество символов увеличилось вдвое, значит высота шрифта уменьшается вдвое, если втрое, то соответственно высота шрифта уменьшится втрое.
font.setPointSize(tray.geometry().size().height()/text.size());
А сколько символов максимум может быть, два?
может тогда именно под два и делать все, а то скачущие по рпзмеру символы выглядят плохо.
3 символа вроде тоже можно разобрать. Вообще при таком методе, естественно, теряется полезный размер, т.к. шрифты, по больше части, не квадратные. И скорее всего можно впихнуть 2 символа такого размера, которым сейчас показываются одиночные. У меня изначально задача другая была - autoscaling. Т.е. нарисовать любой текст в рамках заданного размера таким образом, чтобы он не обрезался painter'ом, а для этого надо либо контент ресайзить, либо QPaintDevice. Сейчас думаю как намутить бегущую строку, чтобы первые символы строки вылезали когда последние еще не спрятались.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)