我已经从点创建了样条图。
现在我想使用键盘上的箭头(左右)在此图表上移动,并在移动时打印所有点(x,y)。
'move' - 我的意思是,放置在图表线的开头'比图表线宽更大的点'并使用键盘(<-,->)移动这个点。
这个怎么做?
您可以使用 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);