Обнаружение всех рядов диаграммы Qt, пересекающих прямоугольник выбора
У меня есть QChart с несколькими QLineSeries и QScatterSeries. Я хотел бы иметь возможность использовать мышь для перетаскивания линии или формы прямоугольника и обнаружения всех серий, которые пересекают этот прямоугольник.
У меня в настоящее время QGraphicsItem рисуется, когда я перетаскиваю клик, и сейчас я пытаюсь определить, какие серии находятся в этом блоке (обратите внимание, что в этом поле могут отсутствовать фактические точки данных, но может быть отрезок линии, интерполированный между 2 ряда данных).
Я не хочу вручную определять пересечение, вычисляя точки интерполяции и проверяя, находятся ли они внутри моего поля выбора (я почти уверен, что Qt может сделать это для меня), поэтому я пытаюсь использовать QGraphicsItem::shape()
а также QGraphicsItem::collidesWith()
процедуры для обнаружения столкновения. Однако я не могу получить представление QGraphicsItem для QLineSeries - возможно ли это вообще?
Было бы лучше попробовать и использовать QPainterPath? Как бы я использовал это в этом случае?
Я также пытался использовать hovered(const QPointF &, bool)
сигнал серии данных, чтобы я мог записать, какие серии были наведены, когда поле выбора было перетащено, но этот сигнал не срабатывает, когда левая кнопка мыши по какой-то причине нажата.:/
0 ответов
представление QGraphicsItem для QLineSeries
QChart ch;
QLineSeries srs;
QList<QGraphicsItem*> bf{ch.childItems()};
ch.addSeries(&srs);
QList<QGraphicsItem*> af{ch.childItems()};
QGraphicsItem * mf;
for(auto e: af)
if(!bf.contains(e))
mf = e;
qDebug().operator<<(mf->isUnderMouse());