问题标签 [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 投票
2 回答
6391 浏览

python - 如何使用 QPainterPath?

我正在使用 pyqt 尝试创建一个显示图像和曲线的应用程序。

为了绘制贝塞尔曲线,我找到了 QPainterPath 类,特别是 QpainterPath.cubicTo。但是,我不明白必须如何使用这个类。我应该在哪个小部件中绘制曲线?

我看到有QpainterQGraphicsView / QGraphicsScene,但我不知道如何使用QPainterPath它们。

你有任何使用QPainterPathpyqt/pyside 的例子吗?(例如,显示三次贝塞尔曲线的简单窗口)

0 投票
0 回答
437 浏览

c++ - Qt如何绘制painter path

Qt(5.4 版本)中的类层次结构非常棒。我试图在 Qt 的源代码中找到解决方案,但我的调查终点是QPaintEngine. 这个类有成员:

这个成员是简单的间隙(什么都不做)。唯一的派生类是 QRasterPaintEngine(linux 的实现),它不会覆盖该drawPath方法。有人有想法吗?

我想找到绘制路径的方法。我猜画家路径(简化版(没有自相交))被转换为多边形。给定的多边形是三角剖分的。我想看看三角测量的实现。

0 投票
1 回答
522 浏览

c++ - 在使用 QPainterPath 绘制自由路径时找到交叉线

我正在实现自由形式的绘图,用于使用鼠标按下绘制自由路径并使用Qpainter QPainterpath移动

现在我必须检测绘制的路径何时与另一条交叉或相交。我如何识别线在某个点何时相互交叉并向用户发出警告。

在此处输入图像描述

0 投票
1 回答
259 浏览

c++ - Qt 在自定义渲染控件上绘制小“x”图标

我在函数中的 Qt 中绘制了一个自定义控件paintEvent(所以我必须进行QPainter绘制)。现在,我想添加一个小的关闭“x”图标,当鼠标悬停在它上面时会显示动画。

我知道QPainterPath有一个“包含”方法,我可以用它来测试鼠标进入该区域,但我想知道我应该如何去绘制小“x”。

当鼠标进入该区域时,我希望'x' 围绕动画(例如旋转),但我不知道如何实现这一点。我试过手动绘制我的“x”,但感觉过于复杂......而且旋转它会很痛苦。

在自定义呈现控件(最好在 QPainterPath 中)中绘制小图标的最佳方法是什么?

0 投票
1 回答
108 浏览

c++ - QGraphicsItem 像素完美碰撞检测器

我想在两个或多个 QGraphicsItem. 该类QGraphicsItem提供了一个使用对象的碰撞检测器QPainterPath,所以现在我想将图像从文件加载到QPainterPath只有不透明像素的图像(制作不透明像素的准确形状),这样我可以使用QGraphicsItem自己的碰撞检测器实现像素完美碰撞检测器。我想知道是否有任何方法可以做到这一点?

0 投票
0 回答
330 浏览

c++ - 如何使用 Qt4.8 (C++) 结合椭球绘制凸矩形?(一艘船的俯视图)

我目前正在尝试使用 Qt 4.8 (C++) 绘制船的顶视图。我想实现一个船在其中移动的 QWidget。

因此我需要绘制一艘船的俯视图,它应该看起来与此类似(只需要外边界):

船的例子
(来源:4vector.com

目前我正在尝试将 QPainter 与 QPainterPath 结合使用,但我无法弄清楚如何正确组合椭圆体和矩形。另一种选择是将它绘制为多边形,但我需要很多点才能让它看起来不错。

此外,我认为仅使用一个矩形和两个椭圆体或类似解决方案的解决方案会更漂亮。

非常感谢您的帮助!

0 投票
1 回答
1423 浏览

qt - 仅绘制 QPainter Path 贝塞尔曲线的一部分

我只想绘制 QPainter 曲线路径的一部分。我有这样的路径:

现在绘制如图 1所示的路径。

在此处输入图像描述

但现在我只想绘制 2 点之间的曲线,比如说 p(1) 和 p(2)。

如何仅绘制贝塞尔曲线的一部分?

0 投票
1 回答
1929 浏览

qt - QPainterPath 在终点关闭曲线子路径

我有一个问题,QPainterPath因为当我这样做时:

它也将曲线下方的区域绘制为黑色。使用QPainterPath::closeSubpath()也没有QPainterPath::moveTo(start)帮助。唯一有帮助的是将曲线拉回到起点,这很愚蠢,而且抗锯齿看起来很糟糕。

但这不仅仅是一个视觉问题。我对 QGraphicsItem::shape() 使用相同的代码,它实际上导致项目的形状包括曲线下方的区域,这是不希望的。

当前(使用上述代码)

在此处输入图像描述

所需(用 生产QPainerPath::quadTo(control, start)

在此处输入图像描述

注意由于QPainter绘制两次所需曲线的不良边缘 - 每个方向一次。

我在这里做错了什么?

0 投票
2 回答
1663 浏览

c++ - QPainterPath 和 QPoint 之间的最短距离

我有一个QPainterPath可以容纳任何线条和/或三次贝塞尔曲线的序列。现在,QPoint我需要计算QPainterPath点和点之间的最短距离。由于路径本身除了存储元素以便我将它们添加到路径之外并没有做更多的事情,因此它本身不提供这样的功能。我唯一的想法是使用 构造一个多边形QPainterPath::toFillPolygon(),但这有时会返回一个等于路径的多边形,有时会返回一个空多边形。而且,QPolygonF对象只是一个点的列表,有的用线连接,有的在原来的路径上没有连接,但我查不出哪些是连接的,哪些不是。

是否有任何(简单)解决方案来计算 a QPainterPath(最好不转换为多边形)和 a之间的最短距离QPoint

0 投票
1 回答
543 浏览

c++ - 如何在 QT 中实现可擦除路径的涂鸦绘图?

什么是正确的方法来实现像在 QT 中绘图一样的涂鸦,但也能够擦除一些绘制的路径?

我已经看到了一些通过将椭圆作为点添加到图像(QImage)来实现绘图的示例,但据我了解,您将无法删除任何绘制的线?我一直在考虑的一件事是实现 QPainterPaths。在鼠标按下时,开始一条新路径,在鼠标移动时将点添加到鼠标位置的路径,并在鼠标释放时完成此路径。在 draw 事件中,我会遍历一组 QPainterPaths 并绘制它们中的每一个。在擦除时,我会遍历数组中的每个 QPainterPath 并检查是否有任何点碰撞,如果是,则从数组中删除整个路径,有效地擦除它。

这是一些有效的方法还是 QPaths 无法实现的?

有没有更好、更聪明的方法来做到这一点?