2

ポイントからスプライン チャートを作成しました。

ここに画像の説明を入力

ここで、キーボードの矢印 (左右) を使用してこのチャート上を移動し、移動中にすべてのポイント (x、y) を印刷したいと思います。

「移動」 - つまり、チャート ラインの先頭に「チャート ラインの幅よりも大きなドット」を配置し、キーボード (<-,->) を使用してこのドットを移動します。

これを行う方法?

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);

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);
于 2017-01-03T13:09:21.553 に答える