Russian Qt Forum

Qt => Model-View (MV) => Тема начата: viyOld от Январь 11, 2012, 11:25



Название: Drag & Drop
Отправлено: viyOld от Январь 11, 2012, 11:25
Имеем ...
Центральный widget  в котором размещены QTreeView и QGraphicsView.

QTreeView отображает список с иконками созданный на основе QStandardItemModel. Элементы в QTreeView перетаскиваються и дропаються как и положенно.

В QGraphicsView размещена наследованная от QGraphicsScene сцена. На ней должны отображаться иконки. Из броузера иконки тянуться и дропаються на сцену нормально.

Вопрос. Как правильно сделать Drag & Drop из QStandardItemModel на QGraphicsScene? Нужно ли наследоватья от QStandardItemModel и переопределять mimeData или можно организовать стандартным набором?

modelListUnits->setSupportedDragActions(Qt::CopyAction|Qt::MoveAction);  // где modelListUnits это QStandardItemModel


void spmapscene::dropEvent(QGraphicsSceneDragDropEvent *event)
{
....
       urlList = event->mimeData()->urls(); // returns list of QUrls
       if ( urlList.size() > 0) // if at least one QUrl is present in list
       {
         fName = urlList[0].toLocalFile(); // convert first QUrl to local path
         QGraphicsSvgItem *newItem = new QGraphicsSvgItem(fName);
         newItem->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
         addItem(newItem);
       }
....
}


Название: Re: Drag & Drop
Отправлено: popper от Январь 11, 2012, 19:26
В справке Qt, раздел которой называется "Drag and Drop", приводится пример с использованием QDrag объекта. Одним из его возможностей является  установка нового курсора при перетаскивании. В примере наследование идет от QWidget, поэтому советую рассмотреть вариант наследования от QTreeView.