I was able to put a "label" on a QGraphicPixmapItem by doing the following:

Qt Code:
  1. class DeviceItem: public QGraphicsPixmapItem
  2. {
  3. public
  4. DeviceItem(DevData* data, QMenu *contextMenu, QGraphicsItem *parent = 0);
  5.  
  6. private:
  7. };
To copy to clipboard, switch view to plain text mode 

and

Qt Code:
  1. DeviceItem::DeviceItem(DevData* data, QMenu* contextMenu, QGraphicsItem* parent) :
  2. QGraphicsPixmapItem(QPixmap(data->getIcon()), parent), m_pText(NULL), m_Menu(contextMenu)
  3. {
  4. setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
  5. setFlag(QGraphicsItem::ItemIsMovable, true);
  6. setFlag(QGraphicsItem::ItemIsSelectable, true);
  7.  
  8. m_pText = new QGraphicsSimpleTextItem(data->getName(), this);
  9. QRect rect = this->pixmap().rect();
  10. QRectF rectF = m_pText->boundingRect();
  11. int x = (rect.width()/2) - (rectF.width()/2);
  12. m_pText->setPos(x, rect.bottom());
  13. }
To copy to clipboard, switch view to plain text mode 

This puts the "label" centered underneath the pixmap. (As for arrow, that's the code to keep the items connected by the lines)

Vycke