2012-05-22 62 views
0

我想在按下按鈕時創建事件程序應允許使用鼠標指針繪製圖片中的自由手繪線。目前我處於可以在選項卡窗口中顯示圖片專輯的階段。任何人都可以通過提供一些指導原則或線索幫助解決這個問題嗎?使用QT的圖片中的自由手繪線性繪圖

回答

0

你的問題相當寬泛,恐怕。我建議對你想達到的目標進行一些研究,也許看看其他人如何解決同樣的問題。您將通過更多地使用它作爲回答特定問題的資源來充分利用它。

也就是說,這裏有幾件事情你可以看看:

QGraphicsScene:表面可能含有大量的2D圖形對象(即,你會允許用戶繪製線條)

QGraphicsSceneMouseEvent:事件你需要捕捉和處理,以便從鼠標輸入到你的場景。您可以通過在您的場景中創建QGraphicsScene的子類和重新執行QGraphicsScene::mouseMoveEventinstalling an eventFilter來處理此事件。

0

如果您使用簡單的QWidget(我的意思是,不像QGraphicsScene那樣複雜)顯示圖片,只需重新實現QWidget::mouseMoveEvent(QMouseEvent *e)。當用戶按下鼠標按鈕(e->buttons() != 0)時,您可以在圖片中進行繪畫。

讓我們假設你在會員QImage img中有你的照片,並跟蹤QPoint cursorLast中的前一個光標位置。我們還假設您使用類似QLabel的東西顯示圖片,您可以在其中將圖片設置爲屬性。那麼你可以做這樣的畫:

void MyWidget::mouseMoveEvent(QMouseEvent *e) { 
    if(e->buttons()) { 
     if(!cursorLast.isNull()) { 
      QPainter p(&img); // and set pen 
      p.drawLine(cursorLast, e->pos()); 
      p.end(); 
      setImage(img); // update image in your view 
     } 
     cursorLast = e->pos(); 
    } 
} 

不要忘了復位cursorLast成員,當鼠標被釋放:

void MyWidget::mouseReleaseEvent(QMouseEvent *e) { 
    cursorLast = QPoint(); // reset 
} 

注意,該代碼沒有進行測試,我也可以在方法中使用了一些錯誤的名字,但是很容易找到真正的名字。