检测与选择矩形相交的所有Qt图表系列

时间:2018-05-24 13:30:58

标签: qt collision-detection qchart

我有一个QChart,上面有许多QLineSeries和QScatterSeries。 我希望能够使用鼠标单击拖动线条或框形状,并检测与该框相交的所有系列。

我当前点击拖动时正在绘制QGraphicsItem,我现在正在尝试检测该框中的哪个系列(注意框中可能没有实际数据点,但可能有一行的一部分在2个数据系列点之间插值绘制。)

我不想通过计算插值点来手动检测交点,并测试它们是否在我的选择框内(我很确定Qt可以为我做这个),所以我'我试图使用QGraphicsItem::shape()QGraphicsItem::collidesWith()例程来检测碰撞。但是,我似乎无法获得QLineSeries的QGraphicsItem表示 - 这有可能吗?

尝试使用QPainterPath会更好吗?在这种情况下我该如何使用它?

我还尝试使用数据系列的hovered(const QPointF &, bool)信号,因此我可以记录拖出选择框时哪些系列悬停,但是当鼠标左键时此信号不会触发按钮因某种原因而失效。 :/

1 个答案:

答案 0 :(得分:0)

  

QLineSeries的QGraphicsItem表示形式

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());