2017-08-23 67 views
0

我正在嘗試升級我的地震圖形查看器以使用瓦片圖形渲染。我對這個過程很不熟悉,但是我試圖創建一個簡單的例子如下。爲什麼我需要使用QVector或QCache(爲了簡單起見,我現在使用QVector)是爲了節省內存和需要在運行中創建的磁貼。我不完全確定你是否能夠做到我下面要做的事情,但本質上它創建了一系列位圖,使它們成爲項目,然後嘗試將它們添加到場景中。這個程序編譯時有十二個錯誤,其中沒有一個直接引用我在mainWindow.cpp中創建的代碼。使用QVector創建圖形瓦片(QCache之前的基礎知識)

誤差是可以在本

C:\Qt\Qt5.9.1\5.9.1\mingw53_32\include\QtCore\qvector.h:713: error: use of deleted function 'QGraphicsPixmapItem& QGraphicsPixmapItem::operator=(const QGraphicsPixmapItem&)' with the only thing changing being the location of the error (different header files)

或該

C:\Qt\Qt5.9.1\5.9.1\mingw53_32\include\QtWidgets\qgraphicsitem.h:861: error: 'QGraphicsPixmapItem::QGraphicsPixmapItem(const QGraphicsPixmapItem&)' is private Q_DISABLE_COPY(QGraphicsPixmapItem) which is in the qgraphicsitem.h header file

產生不編譯由於這些誤差在頭文件彈出代碼

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); 
      ^

我沒有手動更改頭文件,所以我不完全確定爲什麼我會得到這些錯誤。

+0

QObject的是不可拷貝。 Qt4的方式是使用指針而不是對象。 – drescherjm

+0

https://stackoverflow.com/questions/19854371/repeating-q-disable-copy-in-qobject-derived-classes – drescherjm

+0

https://stackoverflow.com/questions/2652504/how-do-i-copy-object -in-qt – drescherjm

回答

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); 
+0

您不必將'QBitmap's存儲爲向量中的指針。這些可以是自動變量。 – thuga