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

有帮助吗?

解决方案

下面是一个如何用鼠标移动绘制的例子:

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

其他提示

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

也就是说,这里有一些你可以看到的东西:

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

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

如果您使用简单的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
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top