Qt рисует заполненный округлый прямоугольник с рамкой
Я хочу нарисовать прямоугольник с закругленными углами (радиус границы одинаковый для всех 4 углов) с определенным цветом, заполняющим весь прямоугольник, и отдельным цветом границы (например, граница шириной 1 px).
Из моего наблюдения Qt предоставляет три метода - fillRect
и drawRect
и drawRoundedRect
. Я попробовал их, они не работают, как я хочу. Нет такого метода, как fillRoundedRect
. Это означает, что я могу нарисовать округленный прямоугольник, но он не будет заполнен цветом, который я хочу.
Как мне это сделать? Кроме того, я читал, что из-за некоторых проблем сглаживания углы часто оказываются неравными. Как установить его равным для всех четырех? Будет ли painter.setRenderHint(QPainter::Antialiasing)
достаточно? Или мне нужно что-то делать?
Ответы
Ответ 1
Вы можете создать QPainterPath
, добавить к нему закругленный прямоугольник, а затем заполнить и погладить его:
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
QPainterPath path;
path.addRoundedRect(QRectF(10, 10, 100, 50), 10, 10);
QPen pen(Qt::black, 10);
p.setPen(pen);
p.fillPath(path, Qt::red);
p.drawPath(path);
Обратите внимание, что даже при сглаживании граница 1 px, вероятно, никогда не будет выглядеть хорошо, особенно на низком рабочем столе DPI, на мобильном устройстве с высоким разрешением DPI она будет почти невидимой.
![enter image description here]()
Если вы создадите прямоугольник как QRectF(9.5, 9.5, 100, 50)
, он будет выглядеть лучше с 1 px сглаженной границей, потому что он "привяжет" правый пиксель:
![enter image description here]()