使用QT在图片中的自由手绘线性绘图

时间:2012-05-22 11:43:59

标签: qt qt4 qtgui

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

3 个答案:

答案 0 :(得分:0)

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

那就是说,你可以看一下这几件事:

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

QGraphicsSceneMouseEvent:您需要捕获和处理的事件,以便从鼠标到场景进行输入。您可以通过在场景中创建QGraphicsScene的子类并重新实现QGraphicsScene::mouseMoveEventinstalling an eventFilter来处理此事件。

答案 1 :(得分: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
}

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

答案 2 :(得分:0)

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

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