ポイントからスプライン チャートを作成しました。
ここで、キーボードの矢印 (左右) を使用してこのチャート上を移動し、移動中にすべてのポイント (x、y) を印刷したいと思います。
「移動」 - つまり、チャート ラインの先頭に「チャート ラインの幅よりも大きなドット」を配置し、キーボード (<-,->) を使用してこのドットを移動します。
これを行う方法?
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);
chart 内の位置を screen 内の位置に変換します。
QPointF pointPos = chart->mapToPosition(point);
次に、 ellipseItem を配置します。
ellipseItem->setPos(pointPos);
x と y の値を同じように表示するには、QGraphicsEllipseItem の代わりに QGraphicsSimpleTextItem を使用します。それらが重なって表示されないように、手動で位置を調整する必要がある場合があります。次に例を示します。
textItemX->setPos(pointPos.x() - 5, pointPos.y() +10);
そしてテキストを設定します:
QString textX = QString("x: %1").arg(pointPos.x());
textItemX->setText(textX);