2012-05-22 83 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 
} 

注意,该代码没有进行测试,我也可以在方法中使用了一些错误的名字,但是很容易找到真正的名字。