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
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.
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));
}
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
@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
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
, 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;
}
}
(Bağlı sinyali
QCustomplot::MouseMove
ile) 'coordToPixel' piksel koordinatları için arsa koordinatları çevirir hızlı yoluolduğunu. Problemini nasıl çözdü? – Nejat