Как нарисовать специальный круг в Qt5?

Я хочу нарисовать специальный сегментированный круг, как показано на рисунке ниже.

Но я не могу понять, как нарисовать дугу или эллипс с помощью setDashPattern.

Изображение:
введите здесь описание изображения

Сначала я думал, что будет работать простое рисование цветного круга и рисование прозрачного прямоугольника или линии, чтобы покрыть его. Но это только что прошло, хотя...

Во-вторых, я попробовал приведенный ниже код,

QPicture pi;
QPainter p(&pi);
QPen pen(Qt::red);

qreal space = 6;
qreal ine = 99;
pen.setDashPattern(QVector<qreal>() <<
line << space << line << space <<line << space);

p.drawRect(0,50, 100, 100);
p.end();

Но это не то, чего я хочу.

Кто-нибудь умеет рисовать такие кольца?


person Haoring    schedule 27.10.2017    source источник


Ответы (1)


Я предлагаю установить путь к рисунку и нарисовать два полных круга.

Вы можете создать QPainterPath, который покрывает области, где нужно нарисовать круги (черные области). Затем установите этот путь к художнику, используя QPainter::setClipPath(). Наконец, нарисуйте два круга.

Видеть:

person Fabio    schedule 27.10.2017
comment
Спасибо за хорошую работу с ключами (ClipPath).. Но я думаю, что мне нужно сделать путь по пути черной линии ... не так ли? Я думаю, что ему нужен путь дуги.. Если я смогу сделать этот черный путь дуги, тогда его будет легче рисовать.. - person Haoring; 27.10.2017
comment
Да, вы правы, я поправлю. Вы можете создать путь, покрывающий черные области, добавив, например, несколько полигонов, например, несколько кусочков торта. - person Fabio; 27.10.2017
comment
Или вы можете добавить большой прямоугольник к пути, который покрывает всю область, а затем несколько полигонов в виде отверстий, которые покрывают белые области. Обязательно используйте Qt::OddEvenFill в качестве правила заполнения пути - person Fabio; 27.10.2017