我正在尝试升级我的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(¤tBitmap);
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(¤tItem);
currentItem.mapToScene((count*150)+150, (count*150)+150);
}
ui->TileView->setScene(scene);
^
我没有手动更改标题文件,因此我不能完全确定为什么会出现这些错误。
答案 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);