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

使用QT在图片中自由绘制线性图,qt,qt4,qtgui,Qt,Qt4,Qtgui,我想创建一个事件,当一个按钮被按下时,程序应该允许在图片中使用鼠标指针绘制自由手线。目前我正处于这样一个阶段,我可以在标签窗口中显示相册中的图片。有人能提供一些指导或线索来帮助你吗?恐怕你的问题很广泛。我建议你研究一下你想要达到的目标,也许看看其他人是如何解决同样的问题的。通过更多地将其用作回答特定问题的资源,您将从SO中获得最大收益 也就是说,这里有几件事你可以看看: :可以包含大量2D图形对象(即允许用户绘制的线)的曲面 :您需要捕捉和处理的事件,以便从鼠标获取对场景的输入。您可以通过创建q

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

恐怕你的问题很广泛。我建议你研究一下你想要达到的目标,也许看看其他人是如何解决同样的问题的。通过更多地将其用作回答特定问题的资源,您将从SO中获得最大收益

也就是说,这里有几件事你可以看看:

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


:您需要捕捉和处理的事件,以便从鼠标获取对场景的输入。您可以通过创建
qgraphicscene
的子类并重新实现,或者在场景中处理此事件。

如果您使用简单的QWidget(我的意思是,不是像qgraphicscene这样复杂的东西)显示图片,只需重新实现
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
}

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

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