2

我已经从点创建了样条图。

在此处输入图像描述

现在我想使用键盘上的箭头(左右)在此图表上移动,并在移动时打印所有点(x,y)。

'move' - 我的意思是,放置在图表线的开头'比图表线宽更大的点'并使用键盘(<-,->)移动这个点。

这个怎么做?

4

1 回答 1

2

您可以使用 QGraphicsEllipseItem 在图形上绘制一个点:http: //doc.qt.io/qt-4.8/qgraphicsellipseitem.html

将图表项作为参数传递给 QGraphicsEllipseItem。

QGraphicsEllipseItem *ellipseItem = new QGraphicsEllipseItem(chart);

然后创建一个 QChartView :

QChartView *chartView = new QChartView(chart);

您可以在其中重新实现捕获按键的功能:

void View::keyPressEvent(QKeyEvent *event)
{
    switch (event->key())
    {
    case Qt::Key_Left:
        ...
        break;
    case Qt::Key_Right:
        ...
        break;
    default:
        QGraphicsView::keyPressEvent(event);
        break;
    }
}

按下这些键时,您可以从一个点转到下一个。要检索点位置,请使用从 QXYSeries ( http://doc.qt.io/qt-5/qxyseries.html ) 继承的样条系列函数:

QPointF point = splineLine->at(index);

将图表中的位置转换为屏幕中的位置:

QPointF pointPos =  chart->mapToPosition(point);

然后定位您的 ellipseItem :

ellipseItem->setPos(pointPos);

要显示相同的 x 和 y 值,但使用 QGraphicsSimpleTextItem 而不是 QGraphicsEllipseItem。您可能必须手动调整它们的位置,以免它们彼此重叠显示,例如:

textItemX->setPos(pointPos.x() - 5, pointPos.y() +10);

并设置文本:

QString textX = QString("x: %1").arg(pointPos.x());
textItemX->setText(textX);
于 2017-01-03T13:09:21.553 回答