1

我想在按下按钮时创建一个事件,程序应该允许在图片中使用鼠标指针绘制徒手线。目前我正处于可以在标签窗口中显示相册的阶段。任何人都可以通过提供一些指导或线索来帮助吗???

4

3 回答 3

0

恐怕你的问题很广泛。我建议对您想要实现的目标进行一些研究,也许看看其他人如何解决同样的问题。通过将 SO 更多地用作回答特定问题的资源,您将充分利用 SO。

也就是说,您可以查看以下几件事:

QGraphicsScene:可以包含大量 2D 图形对象(即您将允许用户绘制的线条)的表面

QGraphicsSceneMouseEvent:您需要捕获和处理的事件,以便从鼠标获取输入到您的场景。您可以通过创建子类QGraphicsScene和重新实现来处理此事件QGraphicsScene::mouseMoveEvent,或者通过在场景中安装 eventFilter来处理。

于 2012-05-22T13:34:11.517 回答
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
}

请注意,此代码未经测试,我可能在方法中使用了稍微错误的名称,但很容易找到真正的名称。

于 2012-05-22T14:05:37.827 回答
0

以下是如何使用鼠标移动进行绘画的示例:

http://qt-project.org/doc/qt-4.8/widgets-scribble.html

于 2012-05-22T14:11:00.313 回答