Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Tonal от Декабрь 21, 2011, 10:07



Название: [drag&drop] Куда бросили [решено]
Отправлено: Tonal от Декабрь 21, 2011, 10:07
Нужно в модели, в реализации dropMimeData (переопределение QAbstractItemModel::dropMimeData) узнать точное положение куда бросили - ровно на итем, под него или над ним.
В QAbstractItemView есть функция защищённая dropIndicatorPosition которая даёт эту инфу.
Есть ли какой-то красивый способ добратся до неё из модели?

Делаю тащи-бросай по Using Drag and Drop with Item Views (http://doc.qt.nokia.com/4.7-snapshot/model-view-programming.html#using-drag-and-drop-with-item-views)


Название: Re: [drag&drop] Куда бросили
Отправлено: GreatSnake от Декабрь 21, 2011, 11:24
Нужно в модели, в реализации dropMimeData (переопределение QAbstractItemModel::dropMimeData) узнать точное положение куда бросили - ровно на итем, под него или над ним.
Интересно, а зачем это вам знать, если об этом знает view?


Название: Re: [drag&drop] Куда бросили
Отправлено: Tonal от Декабрь 21, 2011, 11:38
Предполагаются разные действия.
Вид у меня QTreeView.
Если бросили точно на ноду - происходит "слияние".
Если выше или ниже - притащенное вставляется братом в соответствующее место.

Ну да сам разобрался - параметры dropMimeData - int row, int column, QModelIndex index содержат полную информацию:
Если бросили точно на ноду - в row и column -1 а index - нода.
Если выше ноды - index - родитель ноды а row = нода.row.
Если ниже ноды - index - родитель ноды а row = нода.row + 1.
Ежели бросили мимо - index = root.