Russian Qt Forum
Ноябрь 24, 2024, 00:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переопределение QTreeView::startDrag()  (Прочитано 2853 раз)
nikolnikon
Гость
« : Март 30, 2011, 14:16 »

Здравствуйте. Если кто сталкивался, то прошу помочь.

Переопределяю функцию 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);

Но, почему-то, при перетаскивании отображается только курсор мыши...

Заранее спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 21.