Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Qt图形跟踪轮廓_C++_Qt_Vector Graphics - Fatal编程技术网

C++ 使用Qt图形跟踪轮廓

C++ 使用Qt图形跟踪轮廓,c++,qt,vector-graphics,C++,Qt,Vector Graphics,我正在制作一本漫画书的编辑。我希望能够为语音气球使用一些相当复杂的可定制形状 我可以画尾巴,然后画一个气球,但这意味着我在形状内有轮廓,我只希望它在边缘周围 我假设QPainterPath::simplified()可以解决这个问题,但它似乎没有任何作用 目前,我最好的办法是先画一个轮廓较粗的形状,然后再画一个没有轮廓的形状,但我认为这对“零宽度”轮廓不起作用。我可以在这里想出两种可能的解决方案: 将“尾部”和主“气球”绘制为单个形状。在这种情况下,您只需绘制一个具有单个轮廓和单个填充的单个形

我正在制作一本漫画书的编辑。我希望能够为语音气球使用一些相当复杂的可定制形状

我可以画尾巴,然后画一个气球,但这意味着我在形状内有轮廓,我只希望它在边缘周围

我假设
QPainterPath::simplified()
可以解决这个问题,但它似乎没有任何作用


目前,我最好的办法是先画一个轮廓较粗的形状,然后再画一个没有轮廓的形状,但我认为这对“零宽度”轮廓不起作用。

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

  • 将“尾部”和主“气球”绘制为单个形状。在这种情况下,您只需绘制一个具有单个轮廓和单个填充的单个形状
  • 分别绘制,但绘制两次。首先以黑色绘制形状的“扩展”版本,然后在顶部绘制白色形状的“正常”版本。你根本不会画任何“线”——填充的“扩展”版本也会达到同样的目的

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

结果是
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);

你把一个演讲气球画成两个形状?一个是气球本身,一个是尾巴?为什么不简单地将它们作为一条路径一起绘制呢?因为我希望能够将尾部绘制为曲线,并将引出序号(可能是椭圆、正方形、锯齿边或基本引出序号类的任何其他子类)放置在任意点上。找到一个一致的方法来表示气球是很困难的。如果我可以先画曲线,然后画椭圆,那就更容易了。我自己不熟悉
QPainterPath
,但我知道类似的图形API(比如库)通常允许你有“子路径”——也许你可以在一个“容器”路径中把尾部和主气球画成两个闭合的子路径?如果这不可能,请尝试下面我建议的两个选项中的第二个。