我在一个应用程序中使用QCustomPlot,该应用程序专注于显示外部设备结果的图形。我有一个使用QMouseEvent的光标。每当我得到鼠标事件时,它都会从鼠标位置到轴绘制一条水平线和垂直线。
void PlotClass::ChartMouseMove(QMouseEvent* mouse){
double x = ui->customplot->xAxis->pixelToCoord(mouse->pos().x());
double y = ui->customplot->yAxis->pixelToCoord(mouse->pos().y());
//QCPItemStraightLine *infLine = new QCPItemStraightLine(ui->customplot);
// infLine->point1->setCoords(x, 0); // location of point 1 in plot coordinate
// infLine->point2->setCoords(2, 1); // location of point 2 in plot coordinate
qDebug() << x << y;
// ui->customplot->xAxis->range().minRange();
double xLow = ui->customplot->xAxis->range().lower;
double xHigh = ui->customplot->xAxis->range().upper;
double yLow = ui->customplot->yAxis->range().lower;
double yHigh = ui->customplot->yAxis->range().upper;
infLinex->start->setCoords(x, yLow); // location of point 1 in plot coordinate
infLinex->end->setCoords(x, yHigh); // location of point 2 in plot coordinate
infLiney->start->setCoords(xLow, y); // location of point 1 in plot coordinate
infLiney->end->setCoords(xHigh, y); // location of point 2 in plot coordinate
ui->customplot->replot();
}
我需要做的是当鼠标不再在图表上时删除光标。不知道该怎么做。
将实际光标位置绘制到文本中的行(轴上的值(也是很好的
Ok想明白了。我只是把这个函数调用放在计时器事件中(可能不是最好的方法,但它可以工作(
void PlotClass::CheckHidecursor(void){
if(!Hidecursor && !ui->customplot->underMouse()){
Hidecursor = true;
infLinex->setVisible(false);
infLiney->setVisible(false);
yLabel->setVisible(false);
xLabel->setVisible(false);
qDebug() << "Hide";
ui->customplot->replot();
}
}
因此,如果鼠标不再放在图表小部件上,它会隐藏我输入的行和数字。我发现的关键函数是QWidget::underMouse((,它给出了一个真/假响应。