QGraphicsScene 上的静态 QGraphicsItem
Posted
技术标签:
【中文标题】QGraphicsScene 上的静态 QGraphicsItem【英文标题】:Static QGraphicsItem on QGraphicsScene 【发布时间】:2015-04-24 15:33:42 【问题描述】:我正在使用图形视图框架在 Qt 中开发一个简单的 Pacman 克隆游戏。我创建了一个类,WallItem
,它继承了 QGraphicsItem。它代表迷宫,由许多小块(弧线、直线等)组成。
class WallItem: public QGraphicsItem
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
我的应用程序的主类继承了 QGraphicsView。
class Canvas: public QGraphicsView
Q_OBJECT
private:
WallItem* wallItem;
PacmanItem* pacman;
//other items
在 Canvas 的构造函数中,我将 wallItem 添加到场景中;
wallItem = new WallItem(/*params*/);
scene()->addItem(wallItem);
pacmanItem = new PacmanItem(/*params*/);
scene()->addItem(pacmanItem);
//other items
问题是我只想调用一次wallItem 的方法paint
- 在应用程序开始时,因为迷宫中的墙壁是静态的。但是,当 pacman 移动或食物被移除时,场景更新和所有项目(包括 wallItem)都会重新绘制,从而影响性能。我怎样才能使我的wallItem
静态,而不需要在场景中的每次更新时重新绘制?
对不起,我的英语不是我的母语。
【问题讨论】:
也许 QGraphicsItem::ItemCoordinateCache 是你需要的 【参考方案1】:enum QGraphicsItem::CacheMode
"缓存用于通过分配和渲染到屏幕外像素缓冲区来加速渲染,当项目需要重绘时可以重复使用该缓冲区。对于某些绘图设备,缓存直接存储在图形内存中,这使得渲染很快。”
试试
QGraphicsItem::ItemCoordinateCache
【讨论】:
完美运行!谢谢你,塔利亚!以上是关于QGraphicsScene 上的静态 QGraphicsItem的主要内容,如果未能解决你的问题,请参考以下文章
从 QGraphicsScene 上的 QGraphicsLinearLayout 中删除 QGraphics 项
当图形项目靠在其边框上时,使 QGraphicsScene 更大
在 QGraphicsView/QGraphicsScene 中移动 QGraphicsProxyWidget 中的嵌入式小部件
Qt 获取QGraphicsItem在屏幕上的位置,在QGraphicsItem中获取全局位置,转换为screenPos
使用 QGraphicsScene::addItem 将 QPixmap 项目添加到 QGraphicsScene 会导致 PySide 崩溃