问题标签 [qgraphicspixmapitem]

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 回答
1525 浏览

c++ - QGraphicsView 很慢,有很多 QGraphicsPixmapItem

我编写了一个小代码来使用 QtCreator 测试 QGraphicsView 功能。

代码很简单,只是创建了一个继承自 QGraphicsView 的类,上面有一个 QGraphicsScene。用大量缩放到 100x100 的 QGraphicsPixmapItem(在本例中为 2000)填充场景并将它们随机放置到场景中。

然后在自定义类中并使用 QTimer 移动场景的所有元素。

(添加了第二个 QTimer 以查看每秒调用第一个 QTimer 的次数)。

它适用于几百个元素,但如果元素数量增加,性能会下降。

有人可以给我一个关于如何提高性能的提示吗?也许使用 QList 访问元素很慢......或者为这个简单的动画使用 QTimer 是一个非常糟糕的主意......或者必须在某处添加一些优化标志......也许忘记 QGraphicsView 并尝试QtQuick 和 QML ...

最终的应用程序应该在屏幕上绘制大量图像,并使用 png 图像作为源对其中的一些进行动画处理。

test.pro

C_View.h

C_View.cpp

主文件

0 投票
2 回答
387 浏览

qt - Qt:QGraphicsPixmapItem 类中的信号和插槽

我继承了一个名为GraphicsPixmapItemfrom的类QGraphicsPixmapItem,以便覆盖/创建一些鼠标事件。问题是我想在执行一些计算后发出一个信号,但除非执行一些黑客攻击,否则它看起来是不可能的,因为这个类不是QObject.

为此,我也尝试过继承上述新类QObject,但我不断收到编译器错误。

我的尝试:

头文件(graphicspixmapitem.h):

源文件(graphicspixmapitem.cpp):

我收到以下链接器错误:

未定义对“GraphicsPixmapItem 的 vtable”的引用

对“GraphicsPixmapItem::translationVector(QPointF)”的未定义引用

关于如何进行相应的任何线索?

边注:

我知道这QGraphicsObject可能是一个不错的选择,但正如这里所讨论的,性能看起来会受到使用它们时发出的信号量的严重影响,其中大多数不会在我的情况下使用。这就是为什么我更喜欢使用 baseQGraphicsItem而不是QGraphicsObject.

提前谢谢了。

0 投票
1 回答
127 浏览

qt - Qt QGraphicsProxyWidget隐藏其他QGraphicsProxyWidgets

我正在使用 QGraphicsScene 和 -View 开发 Slotmachine,并且该项目即将结束。但现在我想在获胜线中添加一个小矩形,以显示该线中赢得的学分数量。rect 是 QGraphicsProxyWidget 中的 QLabel。我不知道这是否是解决此问题的最佳方法,但目前我无法找到更好的解决方案。我将 proxyWidget 设置为在标签的构造函数中不可见,但是当我将此 proxyWidget 设置为可见时,场景中的其他 proxyWidget 会消失。我只是不明白为什么。它并没有隐藏每个 proxyWidgets。

问题。

正如您在图片中看到的那样,获胜线的第一个正方形中间有一个红色矩形。这导致了问题。它隐藏了较低的白色边框,这是一个 QGraphicsPixmapItem 和底部通常三个 QGraphicsProxyWidgets 中的第一个,股权(这是不可见的),最后的收益(letzter Gewinn),信用(Guthaben)。我不知道为什么它不隐藏底部的其他小部件,因为它们都是平等的。如您所见,它没有隐藏完整的下边框。我只是不知道为什么会发生这种情况,以及为什么它只发生在下边框和底部的左侧小部件上,而不是任何其他元素。我只是不知道如何解决这样的问题。

读起来有点长,但我不知道如何真正描述问题或如何在代码中向您展示。我希望有人能帮助我。

0 投票
1 回答
2800 浏览

qt - 调整 QGraphicsPixmapItem 的大小

我需要在 QGraphicsScene 上放置一张可点击的图片。我是这样做的:

但我不知道如何使它变小。请告诉,如何制作更小的 QGraphicsPixmapItem 或者是否有另一种方法可以在 QGraphicsScene 上放置可点击和可调整大小的图片?

0 投票
0 回答
218 浏览

c++ - QGraphicsPixmapItem:没有这样的文件或目录^

我对 Qt 有疑问。我昨天和昨天写了一些代码
一切正常,但今天我收到了这条消息。我重新安装了 Qt 两次,但在不同的项目上仍然收到相同的消息。有人知道如何处理这个吗?这是我从编译输出中得到的错误

C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: 进入目录'C:/Users/michal/Documents/build-Game_2-Desktop_Qt_5_6_3_MinGW_32bit-Debug' g++ -pipe - fno-keep-inline-dllexport -g -std=gnu++0x -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NETWORK_LIB -DQT_NETWORK_LIB-DQT_COREM_LIB -DQT_NETWORK_LIB .cpp -o ../Game_2/Tower 在 ../Game_2/tower.cpp:1:0: ../Game_2/tower.h:3:31 中包含的文件中:致命错误:QGraphicsPixmapItem:没有这样的文件或目录#include ^ 编译终止。:目标“../Game_2/Tower”的配方失败 mingw32-make[1]:离开目录“C:/Users/michal/Documents/build-Game_2-Desktop_Qt_5_6_3_MinGW_32bit-Debug”* [../Game_2/Tower] 错误 1 ​​mingw32-make: * [debug] 错误 2 18:46:16: 进程“C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe”退出代码2. 构建/部署项目 Game_2 时出错(套件:Desktop Qt 5.6.3 MinGW 32bit)执行步骤“Make”时 18:46:16:经过时间:00:01。

和代码:

https://pastebin.com/u/NoName977

0 投票
0 回答
55 浏览

python - 如何确定 QGraphicsPixmapItem 的可见坐标?

我正在使用 PyQt 通过以下方式显示图像(我省略了一些繁琐的细节只是为了展示一般方法):

一切正常,图像正确显示在我的窗口中。然后我通过执行以下操作来显示图像的一部分:

其中“roiCoords”只是一个包含在运行时以编程方式生成的 xmin、xmax、ymin、ymax 的列表。当用户调整显示图像的窗口大小时,就会出现问题。我没有在窗口调整大小事件中调用“fitInView(...)”,因为我更喜欢默认行为,即缩放保持不变,但随着用户调整窗口大小,图像被裁剪(或更多图像进入视图)。我的问题是如何确定当用户调整窗口大小以便可以存储它们时可见的图像部分(像素图)(原因是我正在尝试更新感兴趣的矩形区域)s 被绘制在图像的较小表示之上,并且当用户调整包含图像的窗口大小时,需要在其纵横比和位置方面保持同步。)我四处寻找,但找不到任何东西. 非常感谢任何帮助。

更新:我刚刚意识到我可以在调整大小事件中检查窗口尺寸,然后映射到场景。以下的一些变体:

0 投票
1 回答
72 浏览

c++ - 图形项目的 QGraphicsScene 内的可拖动像素图

我有一个带有 QGraphicsItems 块的 12*4 网格的场景,当我右键单击这些块时,我有一个可以在块内添加图标的上下文菜单我的问题是我无法弄清楚如何使这些图标可拖动对于图形场景中的其他块,我知道有“可拖动图标示例”,但我怎样才能将该代码实现到图形场景中。

这是主窗口.h

主窗口.cpp

块.h

块.cpp

0 投票
1 回答
564 浏览

python - QPixmap:如何增加addPixmap中图片的大小?

png 已经在那里了。在滚动条的屏幕上显示它时增加它的大小的方法是什么?

目的是有一个按钮,点击它的图片的大小应该会增加。

0 投票
1 回答
515 浏览

c++ - 2个QGraphicsPixmapItems之间的QT碰撞检测

项目链接 有趣的部分应该在 gameengine.cpp 的“launchSplash”-function 和 splashanimation.cpp

游戏在可接受的范围内随机创建气泡。玩家的工作是用水滴射出泡泡。水滴从游戏画面的中下部分发射。网格仅用于调试,稍后将消失,但它使区域的可视化更容易。

向气泡射击水滴会破坏气泡,但当水滴碰到气泡或游戏的上边界时会消失。水滴射向鼠标点击的方向。

我正在尝试为基本的泡泡射击游戏创建碰撞检测,但我不确定如何以简洁的方式检测碰撞。

游戏板看起来像这个游戏板,水滴从屏幕的中间底部射向光标的方向。

最终我会让水滴从墙上弹跳,但目前我很不屑于弄清楚如何首先检测碰撞。

游戏板是 500x600 单位(宽 x 高),所以水滴的射击点是 (250, 600)。

拍摄水滴时,我使用

如果水滴畅通无阻地移动,水滴将在哪里xDestination以及在哪里结束。yDestionation水滴最终会达到 x=0 / x=500 和/或 y=0/y=600,但我认为这无关紧要。

气泡被添加到游戏板上

gameengine.cpp其中绘制板和水滴被射向气泡。

水滴是使用

我认为有两种方法可以做到这一点:内置 QT 碰撞检测或单独计算。我无法使用 QT Collision,并且我手动检测碰撞的尝试并没有真正奏效。

我已经有一个在某些单元格检测气泡对象的功能,但它在列/行而不是原始坐标 (500x600) 中。

编辑:目前我正在尝试做这样的事情,但我担心它对游戏来说会有点沉重,因为它迭代了很多(或没有?):

我正在尝试将步骤分成小部分并检查当前步骤中是否有气泡,直到水滴到达末端或找到气泡。

就计算而言,这仅适用于我的一方,但是动画偏离了标记并且右侧(x> 250)碰撞检测由于某种原因根本不起作用(它在不可能的位置击中看似随机的气泡右侧)。

编辑^2:以下是我为使用 QT 的实际碰撞检测所做的尝试:

在 splashanimation.cpp 中,水滴是使用

其中场景是 QGraphicsScene,其父级this包含气泡。

我已经在gameboard.cpp(它是气泡和动画的父级)和splash.cpp(它为水滴设置动画)上尝试过这个,但都给了我相同的编译错误。

错误:不能调用构造函数?QGraphicsItem::QGraphicsItem?直接 [-fpermissive] QGraphicsItem::QGraphicsItem(); ^

error: ?collidingItems? was not declared in this scope QList<QGraphicsItem *> list = collidingItems() ; ^

error: cannot call member function ?QList<QGraphicsItem*> QGraphicsItem::collidingItems(Qt::ItemSelectionMode) const? without object QList<QGraphicsItem *> list = QGraphicsItem::collidingItems() ; ^

我也尝试添加论点,但我没有想过要尝试更好的方法。

0 投票
1 回答
130 浏览

c++ - Qt:如何使 QGraphicsPixmapItem 在重复路线中自动移动

我现在正在制作一个游戏,我希望我的 QGraphicsPixmapItem 在同一条路线上重复地在我的视图之间从左到右和从右到左移动。

更加具体:

我的敌人从 (0,0) 开始,它从向右 (x()+3) 开始。当它碰到最右边(800,0)时,它会转向左边并继续移动(x()-3),直到它碰到最左边(0,0)。同样,它向右移动并继续移动 (x()+3) 直到它碰到最右边的 (800,0),它向左转,依此类推,依此类推,以同一条直线前进。

到目前为止,结果是我的项目只停留在最右边,从不移动。

我唯一的线索是它在我的“应用程序输出”中有这个警告,但我想这可能不是这个错误的重点。

libpng 警告:iCCP:已知不正确的 sRGB 配置文件


我这样编码,这些是我的想法:

  • 使用“while”来重复移动。

  • 当我的项目碰到视图的最右边或最左边时,使用布尔判断来转动我的项目的移动方向。

  • 我的 pixmapitem 的宽度是 100,所以我写 x()+100 以便在点击视图的最右侧时到达它的右侧。(我的视图宽度是 800)

有什么我想念的吗?非常感谢任何想法分享或逻辑调试,谢谢!

主窗口.cpp

主窗口.h

敌人.cpp

敌人.h