我想在按下按钮时创建一个事件,程序应该允许在图片中使用鼠标指针绘制徒手线。目前我正处于可以在标签窗口中显示相册的阶段。任何人都可以通过提供一些指导或线索来帮助吗???
3 回答
恐怕你的问题很广泛。我建议对您想要实现的目标进行一些研究,也许看看其他人如何解决同样的问题。通过将 SO 更多地用作回答特定问题的资源,您将充分利用 SO。
也就是说,您可以查看以下几件事:
QGraphicsScene
:可以包含大量 2D 图形对象(即您将允许用户绘制的线条)的表面
QGraphicsSceneMouseEvent
:您需要捕获和处理的事件,以便从鼠标获取输入到您的场景。您可以通过创建子类QGraphicsScene
和重新实现来处理此事件QGraphicsScene::mouseMoveEvent
,或者通过在场景中安装 eventFilter来处理。
如果您使用简单的 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
}
请注意,此代码未经测试,我可能在方法中使用了稍微错误的名称,但很容易找到真正的名称。
以下是如何使用鼠标移动进行绘画的示例: