Sounds great, but I get some runtime error: QPainter::begin: Paint device returned engine == 0, type: 2 QWidget::render: Cannot render with an inactive painter Edit: There is some modification on your suggested code neccessary: const QModelIndex& index = currentIndex(); // Render the pixmap QPixmap pixmap(visualRect(index).size()); //pixmap. render(&pixmap, QPoint(), visualRect(index)); // Create the drag QDrag* drag = new QDrag(this); drag->setPixmap(pixmap); ... But anyhow it renders the cell of one index above the selected one. Maybe that has something to do with the offset parameter (second one in render). Edit2: The proper QRect can be calculated with the height of the horizontal header: render(&pixmap, QPoint(0,0), visualRect(index).translated(0, horizontalHeader()->height() ));