Рисование масштабируемого QIcon с использованием QPainter

Я хочу создать новый QIcon и хочу, чтобы он выглядел как фиксированный текст с закругленным прямоугольником вокруг него

.-----.
| Phy |
`-----´

Предполагается, что значок масштабируется без эффекта "пиксельных блоков" при рисовании на QPainter, к которому в конечном итоге применяется преобразование масштаба (например, когда я рисую в виджет, являющийся частью QGraphicsView с масштабом, примененным к его сцене).

Поэтому мне трудно знать, как я должен рисовать свой QIcon. Если я сделаю это следующим образом, я нарисую QPixmap, который всегда имеет фиксированное количество пикселей, таким образом неизбежно вводя эффект пиксельных блоков, когда масштаб достаточно велик.

 void MyWidget::drawIcon(QPainter *painter, QPoint pos) {
     QPixmap pixmap = icon.pixmap(QSize(22, 22),
                                    isEnabled() ? QIcon::Normal
                                                : QIcon::Disabled,
                                    isChecked() ? QIcon::On
                                                : QIcon::Off);
     painter->drawPixmap(pos, pixmap);
 }

То, что я ищу, похоже на то, как QFont с drawText работает. Независимо от того, насколько велик мой масштаб, когда я рисую шрифты, он всегда выглядит четким, и я не могу обнаружить отдельные пиксели.

Я представляю, что могу сказать QPainter нарисовать мою иконку в заданном пикселе прямоугольника, и QPainter трансформирует сам прямоугольник , прежде чем позволить моему QIconEngine::paint визуализируйте элемент в возможно больший прямоугольник или растровое изображение. Но я не вижу, как я мог сделать что-то подобное.

Я просто тупой и не вижу очевидного решения?

2 ответа

Решение

Я действительно был полностью сброшен. Я могу просто использовать QIcon::paint и передайте ему прямоугольник. Он будет правильно делегировать запрос на движок иконок.

Я делаю это, создавая свои иконки / изображения в виде файлов SVG и используя QSvgRenderer нарисовать их на QPainter, Обязательные классы находятся в модуле SVG.

Другие вопросы по тегам