Обнаружение всех рядов диаграммы 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());
Другие вопросы по тегам