使用QVector创建图形切片(QCache之前的基础知识)

时间:2017-08-23 21:15:10

标签: c++ qt tile

我正在尝试升级我的Seismic Graph Viewer以使用平铺图形渲染。我对这个过程非常不熟悉,但我尝试创建一个简单的例子如下。我之所以需要使用QVector或QCache(我现在简单地使用QVector)是为了节省ram和需要动态创建的磁贴。我不完全确定你是否能够做我在下面尝试做的事情,但实质上它会创建一个位图数组,使它们成为项目,然后尝试将它们添加到场景中。这个程序编译时有12个错误,其中没有一个直接引用我在mainWindow.cpp中创建的代码。

错误是这个

  

C:\ Qt \ Qt5.9.1 \ 5.9.1 \ mingw53_32 \ include \ QtCore \ qvector.h:713:错误:   使用已删除的功能' QGraphicsPixmapItem&   QGraphicsPixmapItem :: operator =(const QGraphicsPixmapItem&)'随着   唯一改变的是错误的位置(不同的标题   文件)

或者

  

C:\ Qt的\ Qt5.9.1 \ 5.9.1 \ mingw53_32 \包括\ QtWidgets \ qgraphicsitem.h:861:   错误:' QGraphicsPixmapItem :: QGraphicsPixmapItem(const   QGraphicsPixmapItem和放大器;)'是私有的Q_DISABLE_COPY(QGraphicsPixmapItem)   它位于qgraphicsitem.h头文件中

由于头文件中弹出这些错误而产生的代码无法编译

int count;
QVector<QBitmap> BitmapArrayTiles;
QVector<QGraphicsPixmapItem> PixmapItemsArray;
QGraphicsPixmapItem currentItem;
QBitmap currentBitmap;
QGraphicsScene *scene = new QGraphicsScene();

for(count = 0; count < 4; count++)
{
currentBitmap = QBitmap(150,150);
QPainter Painter(&currentBitmap);
QPen Pen(Qt::black); // just to be explicit
Painter.setPen(Pen);
drawStuff(Painter);
BitmapArrayTiles.insert(0, currentBitmap);
currentItem.setPixmap(BitmapArrayTiles[count]);
PixmapItemsArray.insert(count, currentItem);
scene->addItem(&currentItem);
currentItem.mapToScene((count*150)+150, (count*150)+150);
}
ui->TileView->setScene(scene);
            ^

我没有手动更改标题文件,因此我不能完全确定为什么会出现这些错误。

1 个答案:

答案 0 :(得分:0)

使用指针和眼泪

int count;
QGraphicsScene *scene = new QGraphicsScene(0, 0, 150*4, 150*4);
QVector<QBitmap*> BitmapArrayTiles;
QVector<QGraphicsPixmapItem*> BitmapItemsArray;
QGraphicsPixmapItem* CurrentItem;
QBitmap *CurrentBitmap;
const QBitmap* CurrentBitmapConstPointer = CurrentBitmap;

for(count = 0; count < 4; count++)
{
    CurrentBitmap = new QBitmap(150,150);
    QPainter Painter(CurrentBitmap);
    QPen Pen(Qt::black); // just to be explicit
    Painter.setPen(Pen);
    drawStuff(Painter);
    BitmapArrayTiles.insert(count, CurrentBitmap);
    CurrentItem = new QGraphicsPixmapItem(*BitmapArrayTiles[count]);
    BitmapItemsArray.insert(count, CurrentItem);
    //PixmapItemsArray.insert(count, currentItem);
    scene->addItem(BitmapItemsArray[count]);
    BitmapItemsArray[count]->setPos((count*150)+150, (count*150)+150);
}

ui->TileView->setScene(scene);