问题标签 [qgraphicsscene]
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.
performance - 对于 QGraphicsScene 在 QGraphicsItem 上使用 setZValue 会导致严重减速
我正在使用 Qt(Mac,4.7 版)通过 QGraphicsView 和 QGraphicsScene 渲染一个相当大的场景(来自 Open Street Maps 的地图数据)。在我尝试为场景中的项目设置 Z 值之前,一切都很好。我尝试了两种不同的方法来做到这一点。一方面,我只是这样做:
另一个我创建了自己的 QGraphicsItem 子类,但遇到了完全相同的问题。
速度变慢的原因似乎是在 Qt 方面。设置 z 值后,场景生成需要很长时间(需要几分钟才能显示任何内容,并且我得到旋转的死亡沙滩球),但是一旦生成,速度就会恢复正常. 此外,当我尝试关闭应用程序时,它会在关闭前挂起几分钟。如果我不考虑 z 值,我看不到任何这些问题,并且我添加了调试代码以验证它没有出现在我自己的代码中。
不幸的是,我需要设置 z 值才能正确渲染街道(例如道路周围的轮廓,使高速公路的顺序高于街道等)。
任何帮助是极大的赞赏!
python - 为什么从 QGraphicsScene 渲染的 PNG 图像偏移不正确?
我有一个程序可以将 a 的内容绘制为QGraphicsScene
PNG 图像。我发现在某些情况下未正确创建 PNG 图像。生成的图像似乎有一定程度的“偏移”,因为 PNG 图像的左上角QGraphicsScene
不在 (0,0) 处。
下面的代码演示了这个问题。该createImage
函数创建一个QGraphicsScene
给定宽度和高度的 a,在坐标 (0, 0) 处绘制一个与场景具有相同宽度和高度的红色实心矩形,将此场景渲染为图像并将图像写入文件。我相信这个函数应该总是写出一个纯红色的图像,不管它给出的宽度和高度如何。但是,这是一个示例输出图像,它表明情况并非如此。
该testImage
函数(依赖于PIL)读取图像并检查最右边的列和底行。如果图像被错误地“偏移”,它将在底行或最右列的某处找到一个白色像素。如果图像已正确生成,则底行和最右列将仅包含红色像素。(PIL 不是问题的一部分;我只是用它来自动测试输出图像。)
以下是一些示例运行:
在这种情况下,“偏移”的效果非常强烈,以至于整个输出图像都是白色的。
这就是生成我上面链接到的示例图像的情况。
此时,图像现在正确地垂直偏移了,但红色矩形仍然被绘制得离右边太远了 55 像素。
现在几乎正确...
因此,如果图像足够大,代码似乎可以正确生成输出图像。
碰巧,我有一个解决这个问题的方法。如果我替换该行,我可以获得createImage
正确创建图像的功能
和
我不知道这段代码中“神奇”数字的意义是什么。但是,我已经使用此解决方法运行了大量测试,并验证它们都生成了正确的纯红色图像。
有这个解决方法没问题,但我想了解为什么这些图像没有正确创建。有什么我错过或忘记做的事吗?
c++ - 使用 QGraphicsScene 平滑动画
我希望我的问题并不总是同一个问题。我有一个 QGraphicsScene。它的项目是一些 QGraphicsPixmaps。我用一个每秒做 SetX +10 的计时器来移动它们。我设置了+10,因为窗口很大100。使用这个解决方案我的动画不流畅。我想我可以通过设置而不是 +10 a +1...+10 来使它们更平滑。但它没有用。
你能建议我一种方法吗?非常感谢。
在我程序的核心部分中,每个演员都是我的游戏角色(在他的功能中,例如移动 ecc)。sceneItems 是一张地图,我在其中将每个演员与他的像素图相关联。x, y 是抽象场景中的位置,x*SIZE 是图形场景中的位置。抽象场景中的位置正在更新,我在图形场景中表示它们。
qgraphicsscene - qgraphicsscene 可以转换为像素图吗?
我想将 a 转换QGraphicsScene
为像素图,所以我可以将它作为QGraphicsPixmapItem
. 我想知道这可能吗?换句话说,我想要得到的只是 a thumb
of a QGraphicsScene
。
qt - 在 QGraphicsItem(父级)中绘制形状,其位置相对于父级
我有我自己的对象实现QGraphicsItem
- 它本质上只是一个带边框的正方形。我正在尝试在该项目中绘制形状,将其用作父项。问题是我用于父级中的形状的坐标不是相对于父级的坐标,而是相对于场景。
示例:我想QGraphicsLineItem
在我QGraphicsItem
的(父母)内画一个。父级为 50,50,尺寸为 20x20。如果我使用指定的父级绘制一条线,使用坐标 0,0,20,20,它会在相对于场景而不是父级的 0,0,20,20 处绘制。
有没有办法让线条(或任何其他形状)使用相对于父级而不是场景的位置?或者我是否需要通过检查父母的 X 和 Y 来手动确定坐标?
c++ - 将自己的对象放入 QGraphicsScene
我想有一个基于图像的拖放功能。如果我拖放一个图像,我想知道我选择并移动了哪个图像(一个简单的 std::string 可以唯一标识该图像所代表的对象)。我的想法是将我自己的对象(QPixmapItem)存储在 QGraphicsScene 中:
这是我用来将对象添加到场景中的方法:
这是我尝试在 QMouseEvent 中“捕获”对象的方法:
对象被添加到场景中,但每当我按下它们时,最后一行(“按下的项目”)永远不会出现在屏幕上。
c++ - 在不同的 QGraphicsView 之间拖放
我有一个 QMainWindow,其中有两个 QGraphicsView,每个都拥有一个 QGraphicsScene。两种视图都不断显示(在屏幕上)。我希望能够将对象(从 QGraphicsItem 子类化的类的对象)从一个 QGraphicsView 拖放到另一个。最好的方法是什么?
ps:我可以在一个QGraphicsView里面拖拽
c++ - Qt4:QGraphicsScene/View 和自定义转换方法?
我知道可以在 Qt 中使用仿射变换。但是是否也可以设置一个完整的自定义全局变换方法呢?
用例:在地理坐标中(在 QGraphicsScene/View 的上下文中)绘制投影地理点(纬度、经度)或检索鼠标事件等。
目前我这样使用它(一点点伪代码):
而且我想在某处“注册”我的转换方法,以便 QGraphicsView(或负责人)在在屏幕上绘制某些内容之前在内部使用这些方法。
或者这既没有意义(因为它会在我不期望的地方引入问题,例如在计算距离时)也不可能?
python - QGraphicsTextItem RightToLeft 文本
我必须将一些波斯语文本写入 a QGraphicsTextItem
,但我找不到如何QGraphicsTextItem
编写 RightToLeft!。
谁能帮我?。
我尝试过这种方式,但它对我不起作用:
谢谢你。
qt - 重绘 QGraphicsItem 时重新定义 QPainter 选项
我想在 QGraphics 场景中绘制每个 QGraphicsItem 之前重新定义 QPainter。
现在已经过时了,什么是“新”方法?
谢谢