我想创建一个事件,当一个按钮被按下时,程序应该允许使用鼠标指针在图片中绘制自由手线。目前我正处于可以在选项卡窗口中显示相册图片的阶段。有没有人可以通过提供一些指导或线索来帮助你?
发布于 2012-05-22 22:11:00
以下是如何使用鼠标移动进行绘制的示例:
发布于 2012-05-22 21:34:12
恐怕你的问题很宽泛。我建议对你想要实现的目标做一些研究,也许可以看看其他人是如何解决同样的问题的。通过将它更多地用作回答特定问题的资源,您将获得最大的好处。
也就是说,这里有几个你可以看看的东西:
QGraphicsScene:可以包含大量2D图形对象(即允许用户绘制的线条)的表面
QGraphicsSceneMouseEvent:需要捕获和处理的事件,以便将鼠标输入到场景中。可以通过创建QGraphicsScene的子类并重新植入QGraphicsScene::mouseMoveEvent来处理此事件,也可以通过在场景中使用installing an eventFilter来处理此事件。
发布于 2012-05-22 22:05:38
如果您使用简单的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
}请注意,这段代码没有经过测试,我可能在方法中使用了稍微错误的名称,但很容易找到真正的名称。
https://stackoverflow.com/questions/10701357
复制相似问题