【问题标题】:Static QGraphicsItem on QGraphicsSceneQGraphicsScene 上的静态 QGraphicsItem
【发布时间】: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 是你需要的

标签: c++ qt


【解决方案1】:

enum QGraphicsItem::CacheMode

"缓存用于通过分配和渲染到屏幕外像素缓冲区来加速渲染,当项目需要重绘时可以重复使用该缓冲区。对于某些绘图设备,缓存直接存储在图形内存中,这使得渲染很快。”

试试

QGraphicsItem::ItemCoordinateCache

【讨论】:

  • 完美运行!谢谢你,塔利亚!
猜你喜欢
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
相关资源
最近更新 更多