2016-12-30 34 views
2

我已經從點創建了樣條曲線圖。現在在qt圖表中移動

enter image description here

我想用鍵盤上的箭頭這張圖(左和右)和打印的所有點(X,Y)上,而移動移動。

「移動」 - 我的意思是,放置在圖線「比圖線寬度大點」的開始位置,並使用鍵盤(< - , - >)移動該點。

如何做到這一點?

回答

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