2017-08-23 6 views
0

J'essaie de mettre à niveau mon visualiseur de graphe sismique pour utiliser le rendu graphique des carreaux. Je suis très peu familier avec le processus, mais ma tentative de créer un exemple simple est ci-dessous. La raison pour laquelle j'ai besoin d'utiliser QVector ou QCache (j'utilise QVector en ce moment pour plus de simplicité) est de sauver le RAM et les tuiles doivent être créées à la volée. Je ne suis pas entièrement sûr si vous êtes en mesure de faire ce que j'essaye de faire ci-dessous, mais essentiellement, il crée un tableau de bitmaps, les rend éléments, puis essaie de les ajouter à la scène. Il y a douze erreurs quand ce programme compile, aucune d'entre elles ne renvoie directement le code que j'ai fait dans le mainWindow.cpp.Création de mosaïques graphiques à l'aide de QVector (Notions de base avant QCache)

les erreurs sont soit ce

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)

ou cette

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

Le code qui produit ne compile pas en raison de ces erreurs d'apparaître dans les fichiers d'en-tête

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

Je n'ai pas changé les fichiers d'en-tête manuellement, donc je ne suis pas tout à fait sûr de savoir pourquoi j'obtiendrais ces erreurs .

+0

QObject n'est pas copiable. La méthode Qt4 consistait à utiliser des pointeurs au lieu d'objets. – 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 -en-qt – drescherjm

Répondre

0

Utilisation des pointeurs et des larmes

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

Vous n'avez pas à stocker 'QBitmap's comme pointeurs dans votre vecteur. Ceux-ci peuvent être des variables automatiques. – thuga