我在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小部件區域(如你所說)相關,而不僅僅是畫布。