移入qt图表

时间:2016-12-30 01:15:10

标签: qt qtchart

我已经从积分创建了Spline图表。

enter image description here

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

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

怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用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);