我在QwtPlotCanvas的子类中使用鼠标事件方法捕获鼠标事件,并使用QwtPlot中的转换方法将鼠标事件x和y坐标映射到它们在图中表示的值。
创建一个QwtPlotCanvas的子类并像这样重写mousePressEvent方法。
void SpecialMapPlotCanvas::mousePressEvent (QMouseEvent* event) {
QWidget::mousePressEvent (event);
double x = plot() -> invTransform (plot() -> xBottom, event -> pos().x());
double y = plot() -> invTransform (plot() -> yLeft, event -> pos().y());
std::cout << "Values " << x << " " << y << "\n";
}
然后通过实例化这个类的一个对象,并把它传递给QwtPlot :: setCanvas上设置QwtPlot画布上。然后SpecialMapPlotCanvas :: plot()为您提供对拥有QwtPlot的引用,并且它的invTransform方法可用于将点击坐标转换为绘图值。如果你在QwtPlot本身上使用鼠标事件,你会得到错误的答案,因为这里的鼠标事件坐标与整个QwtPlot小部件区域(如你所说)相关,而不仅仅是画布。