Рисование масштабируемого 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 визуализируйте элемент в возможно больший прямоугольник или растровое изображение. Но я не вижу, как я мог сделать что-то подобное.

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

3

Решение

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

2

Другие решения

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

1

По вопросам рекламы [email protected]