使用Qt Graphics跟踪大纲

时间:2014-11-10 19:12:54

标签: c++ qt vector-graphics

我正在创建漫画书编辑器。我希望能够为语音气球使用一些相当复杂的可自定义形状。

我可以绘制尾巴,然后绘制一个气球,但这意味着我在形状内部有轮廓,我只想在边缘附近。

我认为QPainterPath::simplified()可以解决问题,但它似乎没有做任何事情。

目前,我最好的想法是绘制一个粗轮廓的形状,然后再画一次没有轮廓,但我不认为这将适用于"零宽度"概述

2 个答案:

答案 0 :(得分:1)

我可以在这里想到两种可能的解决方案:

  • 将“尾巴”和主“气球”绘制为单个形状。在这种情况下,您只需绘制一个具有单个轮廓和单个填充的形状。
  • 单独绘制,但两次。首先用黑色绘制形状的“扩展”版本,然后在其顶部绘制白色形状的“普通”版本。你根本不会绘制任何“线条” - 填充的“扩展”版本将起到同样的作用。

第一种方法允许使用替代线条样式(虚线或波浪线),但后者会允许“轮廓”略微偏移,因此它在某些边缘周围看起来更厚,而在其他边缘周围更薄。

答案 1 :(得分:1)

事实证明QPainterPath::simplified()确实有效。这取决于我是顺时针还是逆时针绘制(我相信它在顺时针方向绘制时有效),我认为这取决于Qt的绕组填充是如何工作的。

// create a path representing the bubble and its "tail"
QPainterPath tail = tail.shape();
tail.addPath(bubble.shape());
tail.setFillRule(Qt::WindingFill);

painter->drawPath(tail.simplified);