2013-04-02 213 views
0

我需要獲取鼠標點擊QwtPlot繪圖區域(而不是整個小部件!)的x和y座標。問題是隻有在每個事件上調用的方法bool event(QEvent*)。我找到了一些解決方案(http://www.qtcentre.org/archive/index.php/t-9502.html),使用QwtPlotPicker但不適用於我,我使用的是Qwt 6,並且沒有像setSelectionState()這樣的方法。QwtPlot鼠標點擊事件

在QwtPlot的繪圖區域實現鼠標點擊事件的其他方法是什麼?

回答

0

還有的是一些變化QWT 6比較5.

現在,我們需要使用QwtPlotPicker::setStateMachine(QwtPickerMachine)方法來設置狀態機。有幾個選項(派生類):

  • QwtPickerClickPointMachine
  • QwtPickerClickRectMachine
  • QwtPickerDragPointMachine
  • QwtPickerDragRectMachine
  • QwtPickerPolygonMachine
  • QwtPickerTrackerMachine

取決於我們的需求。

我們需要做的

接下來的事情是QwtPlotPicker與我們的定製插槽connect()信號selected(...)在這裏我們可以得到x和y座標或其他有趣的數據。

0

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