Qt рисование заполненного закругленного прямоугольника с границей

Я хочу нарисовать прямоугольник со скругленными углами (радиус границы одинаковый для всех 4 углов) с определенным цветом, заполняющим весь прямоугольник, и отдельным цветом границы (скажем, граница шириной 1 px).

из моего наблюдения Qt предоставляет три метода -fillRect и drawRect и drawRoundedRect. Я пробовал их, они не работают так, как я хочу. Нет такого метода, как fillRoundedRect. Это означает, что я могу нарисовать закругленный прямоугольник, но он не будет заполнен цветом I хотеть.

как мне это сделать? А также я читал, что из-за некоторых проблем с сглаживанием углы часто оказываются неравными. Как установить равенство для всех четырех? Уилл!--4--> достаточно? Или я должен делать что-то еще?

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