Здравствуйте. Если кто сталкивался, то прошу помочь.
Переопределяю функцию QTreeView::startDrag(). Хочу, чтобы во время перетаскивания рядом с курсором отображался текст ячейки, которую перетаскиваю. Посмотрел, как это сделано в стандартной реализации и написал след. код:
C++ (Qt)
void OTreeView::startDrag(Qt::DropActions supportedActions)
{
QModelIndexList sel_inds(this->selectedIndexes());
QModelIndex i(sel_inds[0]);
if (sel_inds.size() > 0) {
QMimeData *data = this->model()->mimeData(sel_inds);
if (! data)
return;
QRect rect(this->visualRect(i));
QPixmap pixmap(rect.size());
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
QStyleOptionViewItemV4 option(this->viewOptions());
option.locale = this->locale();
option.locale.setNumberOptions(QLocale::OmitGroupSeparator);
option.widget = this;
option.state |= QStyle::State_Selected;
option.rect = rect;
this->itemDelegate()->paint(&painter, option, i);
QDrag *drag = new QDrag(this);
drag->setMimeData(data);
drag->setPixmap(pixmap);
drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height()));
if (drag->exec(supportedActions) == Qt::MoveAction && this->bRemMovedItem) {
foreach(QModelIndex index, sel_inds)
this->model()->removeRows(index.row(), 1, index.parent());
}
delete drag;
}
this->bRemMovedItem = true;
}
Как я понимаю, здесь идея заключается в том, чтобы отрисовать ячейку на pixmap. Для этого вызывается
C++ (Qt)
this->itemDelegate()->paint(&painter, option, i);
Но, почему-то, при перетаскивании отображается только курсор мыши...
Заранее спасибо.