问题标签 [qpainterpath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
257 浏览

c++ - 打印时 QPainterPath 文本呈现错误

在 Qt 5.4.2 中,我使用 aQPainterPath来呈现文本,因为文本可能被分割成字符并且每个字符都沿着曲线呈现。我在不同平台和打印时看到不同的结果。为了呈现文本,我尝试使用QPainter'sdrawPath()drawPolygon()方法。

OS X 10.11.6:

  • drawPath: 印度文字的第一行有不应该存在的空白,无论是在 a 中QGraphicsView还是在我打印时。
  • drawPolygon:顶线是实心的,无论是在 a 中QGraphicsView还是在我打印时。但是,在打印时,我会在文本中的各个随机点之间得到很多额外的细线。

窗口 7:

  • drawPathQGraphicsView: 和 Mac 上的一样:在我打印时,顶行有间隙。
  • drawPolygon:QGraphicsView是正确的(没有间隙),但打印仍然在顶行有间隙,尽管它没有像在 Mac 上打印时那样的超细线条。因此,使用打印drawPolygon会产生与使用打印相同的错误输出drawPath

这是一个演示这些问题的示例应用程序。QGraphicsItem这是我的示例应用程序中子类的绘制代码:

下面是创建场景并将我的两个QGraphicsItem子类对象添加到场景的示例应用程序的代码:

如何使 a 中呈现的内容QGraphicsView和打印的内容相同且正确?如果 OS X 和 Windows 需要不同的解决方案,没关系。或者如果需要更新版本的 Qt 来解决这个问题,我可以升级 Qt。

更新:

正如 Kuba Ober 所建议的,我在下面这个简单的应用程序中演示了打印错误。我不知道如何从这里开始。

0 投票
1 回答
1528 浏览

c++ - qt使用弧度角在两点之间绘制弧线

我想在两点之间画一条弧线。我知道两点的位置和弧度的角度。我成功地编写了一个小程序来计算圆心,然后才能有效地绘制圆弧。但是当我画一个圆来验证时,当我使用小的弧度值时,圆线不会穿过给定的两个点。

弧度 = 1.0 弧度 = 0.002

但是,从两点到圆心的距离等于计算的半径。我哪里错了?

0 投票
3 回答
10672 浏览

c++ - 如何在QT中绘制一条穿过多个点的平滑曲线?

有没有办法通过 QT 中的一组点绘制一条平滑线?点的数量和位置在运行时设置。

目前,我绘制了一个 QPainterPath,其中包含 lineTo 从点到点的路径,创建了一条路径。我确实使用了渲染提示抗锯齿,但路径仍然是锯齿状的。

我见过 QSplineSeries 似乎提供了这种弯曲的路径,但它在 Qt4.8 中不可用,这是我正在使用的 QT 版本。

经常建议的另一个选项是使用贝塞尔曲线,但那些使用一个起点和终点以及两个控制点,所以我需要为每个段(每个 lineTo)计算它并以某种方式计算我没有的那些控制点眼下。

0 投票
1 回答
522 浏览

c++ - Qt中重叠多边形的透明度

有没有一种简单的方法可以使两个多边形之间的重叠区域透明?最好是 Qt 小部件/Qt 2D 图形C++框架内的内置函数。(不是 QML)

我正在渲染从 Openstreetmap.org 提取的地图数据,并且方式(线段)之间的一些高级关系作为形成多边形的内部和外部方式给出。

例如,一个湖可以有形成多边形的外部通道,以及形成湖内岛屿的多个内部通道。

我能够分别正确构建外部多边形和内部多边形,但我很难找到一种简单的方法来使与内部多边形重叠的区域透明。

在下图中,白色区域是用白色绘制的单独多边形,但它们应该是湖/蓝色多边形的透明区域。

白色应该是蓝色的透明区域

我尝试将 QPainterPath 用于外部多边形并调用

但结果是一个空白屏幕。

我必须在渲染之前自己创建新的多边形吗?

QPainterPath 解决方案是否应该工作而我搞砸了?

是否有一些魔法可以使用 QPen/QBrush 来绘制透明的重叠区域?

非常感谢有关如何解决此问题的任何提示。

0 投票
0 回答
87 浏览

c++ - 如果 QPolygon 很简单,我怎么能得到?

我正在编写一个可以绘制多边形的工具。我希望它们是简单的多边形并禁止绘制复杂的多边形。

我试过 ToSubpathPolygons()

我有形成多边形的 QPoints 列表。

我正在用 c++ + Qt 编码。我想我可以尝试使用分段交叉点,如果有交叉点,那就不简单了。

我认为 qpainterpath tosubpathPolygons 如果它是一个复杂的多边形,应该给我不止一个。问题应该是这样的:

0 投票
1 回答
372 浏览

c++ - QPainterPath 对象上的动画

我想显示一个动画箭头形状按钮。

为了绘制它,我创建了一个继承QGraphicsObject并使用该类的QPainterPath类。

我将它绘制在 a 中QGraphicsScene并使用geometry在 MyArrow 类中重新定义的属性对其进行动画处理。

您可以在这里找到所有代码:https ://github.com/TaiZzZ/arrowAnimation

我的问题如下:

箭头动画(意味着它向右移动并返回)但在移动时保持绘制。你知道为什么吗?

Ps:我使用QState Machine有相同的行为,所以我猜这个问题仅来自我绘制箭头的方式。

我尝试了两种不同的方法:

  • 将贝塞尔曲线更改为直线,并不能解决问题。

  • 我没有画路径,而是画了一个矩形(the boundingRect())(所以我只改变了drawPath(path)),它可以工作

总而言之,该错误来自QPainterPath ...但是为什么呢?

编辑 :

这里有图片来说明我的问题:

动画之前 动画结束后

请注意,它不再是抗锯齿的...

0 投票
1 回答
325 浏览

python - 在 QGraphicScene 中创建带有可移动节点的闭合路径

我正在尝试从这个答案扩展出色的实现,因此将通过用户在图形场景中的点击创建路径,并使用双击关闭路径。

这很好用,但我唯一无法解决的问题是路径中第一个节点的更改。显然我希望它会通过该itemChanged方法更新附加到它的最后一个子路径,但无法实现。

关于如何解决这个问题的任何建议?

我尝试了以下变体,但它不影响最后一个子路径:

我的实验的完整代码:

0 投票
1 回答
194 浏览

c++ - 更改 QGraphicsPathItem 中子路径的颜色?

所以我目前在这里使用代码,以前的帖子来创建和更新一个 QGraphicsPathItem。

所有这些都可以正常工作,但现在我需要更改 pathItem 中包含的子路径的颜色。我可以看到使用 QPainter,我可以在此处的其他示例中找到路径,但我没有使用 QPainter,因为它在 GraphicsScene 中。

我明白那个:

创建新的子路径,关闭旧的子路径,但是如何更改 QPen 或仅更改应用于此子路径的颜色?

到目前为止,我只能看到如何更改应用于整个 QGraphicsPathItem 的 Pen,这不是我需要的。

我的想法是每次需要更改颜色时都需要创建一个新的 QGraphicsPathItem 。我当然希望不会。

提前感谢您的帮助。

0 投票
1 回答
274 浏览

qt5 - 如何在 Qt5 中绘制特殊的圆?

我想绘制一个特殊的分段圆,如下图所示。

但我无法理解如何使用 setDashPattern.

图片:
在此处输入图像描述

起初,我认为只画一个彩色圆圈并画一个透明的矩形或线条来覆盖它就可以了。不过就这么过去了……

其次,我尝试了以下代码,

但这不是我想要它做的。

有谁知道如何画这样的戒指?

0 投票
1 回答
1998 浏览

c++ - 如何以不同的方式为 QPainterPath 子路径着色?

正如标题所示,我正在寻找一种方法来为应用于 QGraphicsPathItem 的 QPainterPath 的子路径着色不同的颜色,或者简单地使用 QGradient QPen 沿着 PathItem 更改颜色。

最终,我试图找到正确的解决方案,这将使我能够明显地绘制一条线,这条线会根据外部变量改变颜色。

我正在使用 QGraphicsScene 来绘制所有内容。

我目前的解决方案是让我创建多个 QGraphicsPathItems,每个 QGraphicsPathItems 用各自的 QPens 着色不同。当我获取数据时,我会填充与这些 PathItem 关联的 PainterPath。这给了我需要的彩色线条,但线条明显断开。

我需要能够在颜色更改期间使 QPainterPath 的子路径不可见,或者更改应用于单个 PathItem 的渐变。或者也许我缺少另一种方法。任何帮助都会很棒。

-编辑:

正如我的问题的解决方案中所述,这就是我目前正在绘制的方式。再次注意,我使用的是 GraphicsScene。

GraphicsScene 中的轴承公式计算产生不稳定的结果

这就是我想要做的。 期望的结果

正如您所看到的,线条在绘制时会通过外部变量改变颜色。恐怕 Qgradient 可能不起作用,因为这条线并不总是笔直的;颜色需要沿着线条流动。

这是正在发生的事情:

在此处输入图像描述

如您所见,红线 (PathItem) 从上次可见的位置跳到新位置。

为了帮助更好地阐明行为,想象这条线是随着时间的推移而绘制的。它一开始是红色的,很快就会设置一个变量,并且绘制的线段的颜色变为橙色。线的红色部分保持不变,因此我们可以从历史上看到当时变量的状态。在不同的时间,变量会进行调整,并且应用于线条的新部分的颜色会相应地更新。

当线条绘制完成后,我们可以查看它,看看颜色何时发生变化。

我希望这一切都有意义。