我已经从积分创建了Spline图表。
现在我想使用键盘上的箭头(左右)移动此图表,并在移动时打印所有点(x,y)。
'移动' - 我的意思是,放在图表行的开头“比图表线宽更大的点”'并使用键盘(< - , - >)移动此点。
怎么做?
答案 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);