Точка пересечения QPainterPath и линии (найдите QPainterPath y по x) - PullRequest
4 голосов
/ 22 февраля 2012

У меня есть QPainterPath.Мне нужно найти координату y QPainterPath по x.

Я нашел метод intersected () в QPainterPath.Итак, я создал новый QPainterPath, который является линией от левого к правому краю ограничивающего прямоугольника моего пути с координатой x, чтобы найти точку в результате пересечения.

метод intersects () возвращает true.Но intersected () возвращает пустой путь.

Все работает Если я использую прямоугольник с высотой = 1 вместо линии.

Может быть, у вас есть идея, как найти пересечение QPainterPath со строкой?

1 Ответ

2 голосов
/ 22 февраля 2012

Согласно документации:

QPainterPath QPainterPath :: intersected (const QPainterPath & p) const

Возвращает путь, который является пересечением области заполнения этого пути и области заполнения p. Кривые Безье могут быть сплющены к отрезкам из-за численной нестабильности выполнения пересечений кривой Безье.

Поскольку ваша строка не имеет области заполнения, может показаться, что эта функция не будет работать для вас.

Если вы используете QGraphicsScene для отображения вашего QPainterPath, вы можете использовать метод collidingItems:

QList QGraphicsScene :: collidingItems (const QGraphicsItem * item, Qt :: ItemSelectionMode mode = Qt :: IntersectsItemShape) const

Возвращает список всех предметов, которые сталкиваются с предметом. Столкновения определяются путем вызова QGraphicsItem :: collidesWithItem (); обнаружение столкновений определяется режимом. По умолчанию возвращаются все элементы, форма которых пересекает элемент или содержится внутри формы элемента. Элементы возвращаются в порядке убывания (т. Е. Первый элемент в списке является самым верхним элементом, а последний элемент - самым нижним элементом).

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

...