5

我想使用 Qt 以粉笔样式绘制线条,就像您通常在黑板上看到的那样。这是我想到的一个例子:

粉笔风格绘图示例图像

实现这种渲染风格的最佳方法是什么?我需要用特殊的画笔画很多小线条,还是有更好的方法来获得您在示例图像中看到的“曲线”样式?

整合它的最佳位置在哪里?从理论上讲,最好在 QPainter 下使用它,例如在自定义 QPaintEngine 中,这样所有各种 QPainter::drawLine 调用最终都使用粉笔样式。然而,虽然 QPaintEngine 接口看起来很完美,但该类本身并不打算用于此目的......

提前感谢您的帮助。

问候,

费边

4

2 回答 2

2

我以不同的方式解决了这个问题。使用带纹理的刷子并没有提供好的效果(也许是我的错)。不幸的是,QGraphicsEffect 不是一个选项,因为我的渲染不是基于 QGraphicsView。

我最后做了什么:

  • 从 QPainter 派生一个自己的类(即 ChalkPainter)
  • 向 ChalkPainter 添加了新的 drawChalkLine() 方法。此方法采用传递的线,将其拆分为更小的块,并通过 QPainter::drawPath 将这些块渲染为贝塞尔曲线。对于每个贝塞尔曲线块,我随机移动与线正交的控制点。
  • 接下来,我在 ChalkPainter 类中添加了其他渲染方法,例如 drawChalkRect(),所有这些都在内部使用 drawChalkLine() 方法。

这不是最优雅的方法,因为我不能直接使用 QPainter 方法,但它为我的目的提供了很好的结果。这是一个例子:

在此处输入图像描述

于 2013-10-16T12:36:07.573 回答
1

我将开始以 QGraphicsEffect 的方式寻找.. 我认为应该可以开发出这样的过滤器,它会产生类似的效果..

我将在此处更新您的评论的答案。

不,QGraphicsEffect 可以“每个图形项”应用。如果您查看 QGraphicsItem,您会看到有一个 setGraphicsEffect 方法,因此您可以设计一个适用于 QGraphicsLineItem 的效果,并且仅将其设置在您希望看起来像白垩的线条上。

重要的是您不必对预先绘制的图像进行操作,您可以使用 graphicsEffect 使其完全由所有者绘制项目(例如,假设效果仅适用于 QGraphicsLineItem)使用 drawSource( ) 然后修改或完全从头开始绘制..

我很乐意帮助您进行一些编码,可能会在下周左右的某个地方完成,因为我现在正在从事的项目需要类似的东西..但是接下来几天实际上没有时间..

完成后,我将使用源链接更新答案。

自定义刷子看起来也很有前途..

于 2013-08-05T20:33:22.997 回答