void PuzzleBoardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { // Save the original transform of the painter QTransform originalTransform = painter->transform(); // Order the puzzle pieces by z value (ascending) QList<PuzzlePiece*> puzzleItems = _game->puzzleItems().toList(); qSort(puzzleItems.begin(), puzzleItems.end(), PuzzlePiece::puzzleItemAscLessThan); // Draw the pieces foreach (PuzzlePiece *piece, puzzleItems) { QPointF p = piece->mapToParent(QPointF(0, 0)); QTransform transform = QTransform::fromTranslate(p.x(), p.y()).rotate(piece->rotation()); painter->setTransform(transform); // Draw the strokes first foreach (PuzzlePiecePrimitive *p, piece->primitives()) painter->drawPixmap(p->strokeOffset(), p->stroke()); // Draw the actual pixmaps foreach (PuzzlePiecePrimitive *p, piece->primitives()) painter->drawPixmap(p->pixmapOffset(), p->pixmap()); }