问题标签 [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.

0 投票
1 回答
473 浏览

c++ - 在窗口调整大小时重新定位图形项目

好的,我基本上在图形场景中随机放置了图形项目。我打开一个窗口并显示这些项目。当我调整窗口大小时,我希望这些项目保持相同大小但与窗口大小成比例地重新定位。我是如何做到这一点的,我将图形视图子类化,然后当发生调整大小事件时,它将调整大小对象发送到我的图形场景对象。然后我能够做这样的事情:

然后我使用这些值来做到这一点:

这工作正常,但如果我将窗口调整得非常小或大,那就不太对了。我认为问题在于图形场景矩形和图形视图矩形不一样或什么。此外,我有一个调整窗口大小的背景:

这是我正在编写的程序中需要的东西。此外,它允许我查看调整大小是否有效。我基本上可以将背景设置为多边形,然后在多边形的边缘放置点。当我将图像调整为非常大或小时,这些点不再位于多边形的顶点上,尽管它们有点接近。有谁知道更好的方法或解决方法?谢谢。

编辑:这是我正在做的项目:

dropbox.com/s/myxi8kvdl7x9ye2/ncorr.tar.gz

0 投票
1 回答
1095 浏览

c++ - Qt 程序在 Windows 中绘制折线时崩溃

我开发了一个跨平台的 Qt 程序,它在 QGraphicsScene 上绘制折线:

当程序收到以下值时,程序在 Windows 上崩溃:

这条折线由一条几乎水平的线组成。当直线水平或 y1 和 y2 之间的绝对差为 0 或大于 0.5 时,不会发生崩溃。它不会在 Ubuntu 上崩溃。

当我将折线更改为多边形时,程序不会崩溃。我最好但丑陋的解决方案是将折线绘制为多边形 - 将相同的点两次附加到多边形:

我试图在一个小型且独立的程序中重新创建该错误,该程序在 QGraphicScene 上绘制一条具有相同坐标的线。没有观察到崩溃。

为什么会发生这种崩溃?这个错误有更漂亮的解决方案吗?

顺便说一句,VS2008 调试器中的调用堆栈告诉我崩溃是在由 QtGui4.dll 调用的 msvcr90.dll 中的 malloc.c 中。

技术:

Qt版本:4.7.0

操作系统:Windows 7 和 Ubuntu

0 投票
1 回答
149 浏览

c++ - QGraphicsScene 类似 removeAt() 和 insert() 函数?

我有一个 QGraphicsScene,其中项目的顺序非常重要。我想在项目列表中的某个索引处添加项目(即items()调用时返回的列表)。

我知道 QList 具有removeAt()andinsert()功能,但 QGraphicsScene 是否有类似的东西,比如addItemAt()所有这些行?如果没有,有没有人知道解决这个问题的好方法?

0 投票
1 回答
565 浏览

qt - Qt:QGraphicObject 和 QImage

我有一个QGraphicsObject包含 aQImage和 ovveride的派生类

在痛苦中我成功地画了QImage。是的QGraphicsObject一个项目QGraphicsScene,后者在 a 内QGraphicsViewQImage尺寸超过QGraphicsScene尺寸。我的目的是为了drag显示QImage(或QGraphicsObject)的超出部分QImage。我怎样才能做到这一点?有translate画布QImage吗?

可以给我一些文档或示例吗?

谢谢

0 投票
2 回答
3511 浏览

c++ - QGraphicsScene 缺少特定项目更新

我有一个应用程序,您可以在其中观看给定 2D 游戏的回放:

基本上,车辆在地图上移动。视图以车辆为中心,因此地图在回放时滚动,类似于Micro Machines(这只是为了提供一个想法,实际游戏不是Micro Machines)。


(来源:randomracket.com

在我的场景中,当车辆四处移动时,地图是静态的。回放的每一帧视图都在滚动,因此车辆居中。出于性能原因,地图在几个QGraphicsPixmapItems 中平铺。

视口更新模式设置为QGraphicsView::BoundingRectViewportUpdate。项目索引方法设置为QGraphicsScene::NoIndex.

在大多数情况下,一切正常。但是当地图比平时大时,车辆不会更新。视图正在滚动,图块更新良好;但不是车辆,除非我通过放大/缩小触发完整的视口更新(所以我知道该项目定位良好)。

车辆的 boundingRect 永远设置一次,并且是有效的(见下文,以逻辑坐标给出)。我不在项目的边界矩形之外绘制。

调试输出的一些示例(只有第三个配置不起作用):

我试图调试一个更新通道,并且油漆事件确实排除了车辆所在的区域......

任何人都知道为什么更新可能会错过特定项目?

编辑 :

Qt:4.8.1,我也看到了以前版本的问题

操作系统:Windows XP SP3,尚未在其他操作系统上测试

我没有成功地用一个最小的例子重现这个问题。最小的例子就像预期的那样工作。在现实生活中,这是完成的:

  1. 地图是从文件中读取的。它由多达数百个界定地面/天空的多边形(每个多边形以图形方式由多边形、边和顶点层组成)、数千张图片和纹理组成,然后将其剪裁到地面或天空,以及其他一些项目。

  2. 我计算所有剪辑,然后在 QImage 中渲染场景。图像在添加到场景中的几个 s 中平铺QGraphicsPixmapItem,而以前的项目从场景中删除并删除(顺便说一下,当我没有删除和删除以前的项目时,也会出现错误)。

  3. 重播开始了

我认为 Qt Graphics 内部搞砸了,但我不知道如何清理/重置它。

这是一个图形示例(说明我所说的地面/天空的意思)。地图可能非常巨大。


(来源:kopasite.net

0 投票
1 回答
4320 浏览

qt - 如何使 QGraphicsItem 在 QGraphicsScene 中显示背景?

在 aQGraphicsScene中,我有一个背景设置,QGraphicsItem上面有几个 s。这些图形项具有任意形状。我想制作另一个QGraphicsItem,即一个圆圈,当放置在这些项目上时,它将基本上显示这个圆圈内的背景,而不是用颜色填充。

这有点像在 Photoshop 中具有多层背景。然后,使用圆形选框工具删除背景顶部的所有图层以显示圆圈内的背景。

或者,查看它的另一种方式可能是设置不透明度,但此不透明度会影响其正下方的项目(但仅在椭圆内)以显示背景。

0 投票
1 回答
1151 浏览

qt - PySide 移动 QGraphicsPixmapItem 跳转到场景左上角

我正在编写一个应用程序,该应用程序允许用户通过单击空白区域将图像放置在 QGraphicsScene(包含在 QGraphicsView 中)上,然后使用 mousemoveevent 移动它们。图像是使用子类 QGraphicsPixmapItem 创建的。

问题出在:第一次尝试移动项目时按预期工作。但是,对于所有后续移动,所选项目会立即跳转到场景的左上角。这是代码:

任何帮助,将不胜感激!

0 投票
1 回答
162 浏览

qt - 移动 QGraphicsItem 的“图形”

我有一个带有自定义图形的 QGraphicsItem,如下图的上半部分所示,其中红色圆圈是shape()该项目的:

qgraphicsitem

有没有办法保留图形,但只是像下半部分所示的那样移动它?

0 投票
1 回答
372 浏览

c++ - QT keyPressedEvent 太慢?

我正在用 qt creator 开发一个射击游戏,我的问题是与keyPressEvent我的场景功能的链接:

它可以编译,但我的精灵(vasisseau)移动得很慢。如何改进代码以使其运行得更快?

0 投票
1 回答
681 浏览

qt - QGraphicsItem.scene() 的 0/0 点(限制项目移动)

我在限制 QGraphicItems 的移动时遇到问题:

这段代码应该防止一个项目被拖到场景的左边,从而增加它的大小。它有点工作。我的问题是:

我在创建场景时插入项目。On 位于 x=0(场景坐标)。另一个位于 x=10(场景坐标)。使用此代码,我不能拖动 x=10 左侧的第二个项目。

似乎对QGraphicsItem::scene()的调用为这两个项目返回了不同的场景。