2013-08-09 39 views
9

lsLine Satır stiline sahip olduğum QCustomPlot sayfamdaki farklı noktaların çizim değerlerini görüntülemeye çalışıyorum. QCustomPlot üzerinde bir fare üzerinde sinyal ayarlayabilirsiniz biliyorum ama bu gerçekten yardım etmek istemiyorum çünkü sadece fare benim çizilen çizgi üzerinde olduğunda bilgilendirilmek gerekiyor. Benim soru benim fare üzerinde dağınık olup olmadığını öğrenmek için herhangi bir yol var mı puan. Fare bir dağılım noktası üzerinde olduğunda bana söyleyebilecek bir sinyal var mı?Fare üzerinde çizim değerlerini görüntüleyin. - Scatter noktalarını saptamak

cevap

9

Yeniden Yapılandırma QCustomPlot::mouseMoveEvent veya QCustomPlot::mouseMove'a bağlanın.

Sonra Coords çizmek ve QMap::lowerBound(cursorX) ile sizin QCPDataMap en yakın noktaları aramak için (imleç) piksel Coords çevirmek için eksenleri coordToPixel kullanın.

+0

(Bağlı sinyali QCustomplot::MouseMove ile) 'coordToPixel' piksel koordinatları için arsa koordinatları çevirir hızlı yolu

olduğunu. Problemini nasıl çözdü? – Nejat

6

QCustomPlot'un yattığı mouseMove sinyaline kolayca bir yuva bağlayabilirsiniz. Daha sonra, koordinat bulmak için QCPAxis::pixelToCoord kullanabilirsiniz: X ekseni (saniye başına daha fazla nokta da dahil olmak üzere), tarih saat biçimini kullandığınızda

connect(this, SIGNAL(mouseMove(QMouseEvent*)), this,SLOT(showPointToolTip(QMouseEvent*))); 

void QCustomPlot::showPointToolTip(QMouseEvent *event) 
{ 

    int x = this->xAxis->pixelToCoord(event->pos().x()); 
    int y = this->yAxis->pixelToCoord(event->pos().y()); 

    setToolTip(QString("%1 , %2").arg(x).arg(y)); 

} 
+0

Eğer ui-> widget_graph1 've' ui-> widget_graph2' üzerinde iki grafiğim varsa, bunu hem grafikler için nasıl yapabilirim? Davranışlarıma uyması için void CustomPlot :: showPointToolTip (QMouseEvent * olayı) {} 'işlev adını değiştirmeli miyim? Her iki grafiğin de mouse hover'daki koordinatları göstermesini istiyorum, teşekkürler – Wei

+0

@Wei Eğer aldığım gibi 'QCustomPlot' kaynak kodundaki slotu uygularsanız, tüm grafikler için araç ipucu gösterilir. Ayrıca yuvaya başka bir sınıfta sahip olabilirsiniz ve 'mouseMove 'sinyalini yayınlayan arsa bulmak için' sender()' ı kullanabilirsiniz. – Nejat

+0

Sadece QCustomPlot :: toolTip'i bulmayı başardım ve void QCustomPlot :: showPointToolTip (QMouseEvent * olayı) {} 'nı 'void QCustomPlot :: toolTip (QMouseEvent * olayı) {}' olarak değiştirdim. ? – Wei

2

, piksel başarısız Koord için. noktalar arasındaki koordinatları görüntülemek isterseniz , o zaman bu belki yararlı @Rajeshwar

void MainWindow::onMouseMoveGraph(QMouseEvent* evt) 
    { 
    int x = this->ui->customPlot->xAxis->pixelToCoord(evt->pos().x()); 
    int y = this->ui->customPlot->yAxis->pixelToCoord(evt->pos().y()); 
    qDebug()<<"pixelToCoord: "<<data.key<<data.value; //this is correct when step is greater 1 second 

if (this->ui->customPlot->selectedGraphs().count()>0) 
     { 
     QCPGraph* graph = this->ui->customPlot->selectedGraphs().first(); 
     QCPData data = graph->data()->lowerBound(x).value(); 

     double dbottom = graph->valueAxis()->range().lower;  //Yaxis bottom value 
     double dtop = graph->valueAxis()->range().upper;   //Yaxis top value 
     long ptop = graph->valueAxis()->axisRect()->top();   //graph top margin 
     long pbottom = graph->valueAxis()->axisRect()->bottom(); //graph bottom position 
// result for Y axis 
     double valueY = (evt->pos().y() - ptop)/(double)(pbottom - ptop)*(double)(dbottom - dtop) + dtop; 

//or shortly for X-axis 
     double valueX = (evt->pos().x() - graph->keyAxis()->axisRect()->left()); //graph width in pixels 
     double ratio = (double)(graph->keyAxis()->axisRect()->right() - graph->keyAxis()->axisRect()->left())/(double)(graph->keyAxis()->range().lower - graph->keyAxis()->range().upper); //ratio px->graph width 
//and result for X-axis 
     valueX=-valueX/ratio + graph->keyAxis()->range().lower; 


     qDebug()<<"calculated:"<<valueX<<valueY; 
     } 
}