Я хочу создать новый 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
визуализируйте элемент в возможно больший прямоугольник или растровое изображение. Но я не вижу, как я мог сделать что-то подобное.
Я просто тупой и не вижу очевидного решения?
Я действительно был полностью сброшен. Я могу просто использовать QIcon::paint
и передайте ему прямоугольник. Он будет правильно делегировать запрос на движок иконок.
Я делаю это, создавая свои иконки / изображения в виде файлов SVG и используя QSvgRenderer
нарисовать их на QPainter
, Обязательные занятия находятся в Модуль SVG.