Как по-разному раскрасить подпути QPainterPath?

Как видно из заголовка, я ищу способ закрасить подпути QPainterPath разными цветами, который применяется к QGraphicsPathItem, ИЛИ просто изменить цвет вдоль PathItem с помощью QGradient QPen.

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

Я использую QGraphicsScene, чтобы нарисовать все.

В моем текущем решении я создал несколько QGraphicsPathItems, каждый из которых по-разному окрашен соответствующими QPens. Когда я получаю данные, я заполняю PainterPath, связанный с этими PathItems. Это дает мне разноцветные линии, которые мне нужны, но линии явно отключены.

Мне нужно либо иметь возможность сделать невидимые подпути QPainterPath во время изменения цвета, либо изменить градиент, примененный к одному PathItem. Или, может быть, есть другой подход, который мне не хватает.
Любая помощь будет замечательной.

-Редактировать:

Вот как я сейчас рисую, как отмечалось в решении моего вопроса. Опять же, обратите внимание, что я использую GraphicsScene.

Расчет формулы подшипника в GraphicsScene приводит к ошибочным результатам

Вот что я пытаюсь сделать.
Желаемый результат

Как вы можете видеть, линия меняет цвет, как она нарисована, внешними переменными. Боюсь, что Qgradient может не работать, потому что линия не всегда будет прямой; цвет должен течь вдоль линии.

Вот что происходит:

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

Как видите, красная линия (PathItem) прыгает с того места, где она в последний раз была видна, на новую позицию.

Чтобы лучше понять поведение, представьте, что эта линия проводится со временем. Он начинается красным, вскоре устанавливается переменная, а цвет нарисованных отрезков линий меняется на оранжевый. Красные части линии остаются нетронутыми, поэтому мы можем исторически увидеть, каково было состояние переменной в то время. В разное время переменная корректируется, и цвет, применяемый к новым частям строки, обновляется соответствующим образом.

Когда линия закончила рисовать, мы можем посмотреть на нее и посмотреть, когда цвета изменились.

Я надеюсь, что все это имеет смысл.

7

Решение

Вы можете использовать несколько QPainterPathпо одному на каждый цвет. А затем покрасьте их в нужный цвет. Обязательно используйте moveTo() переместить курсор текущего пути без рисования линии.

void Widget::paintEvent(QPaintEvent *event)
{
QPainterPath redPath;
QPainterPath bluePath;
redPath.moveTo(0,0);
redPath.lineTo(60,60);
bluePath.moveTo(60,60);
bluePath.lineTo(70,20);
redPath.moveTo(70,20);
redPath.lineTo(100,100);
bluePath.moveTo(100,100);
bluePath.lineTo(160,260);QPainter painter(this);
painter.setRenderHint(QPainter::HighQualityAntialiasing, true);
painter.setPen(QPen(Qt::red, 4));
painter.drawPath(redPath);
painter.setPen(QPen(Qt::blue, 4));
painter.drawPath(bluePath);

}

оказывать

Если вы чувствуете, что вызовы «moveTo» и «lineTo» немного тяжелы, вы можете инкапсулировать все QPainterPaths в вашем собственном классе с помощью lineTo(QPointF, QColor) функция, которая будет обрабатывать переключение пути при изменении цвета.

5

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

Других решений пока нет …

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