Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Авварон от Апрель 13, 2009, 12:37



Название: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Авварон от Апрель 13, 2009, 12:37
подскажите, как нормально реализовать возможность перетаскиваия из 1ого QTreeWidget'а в другой, причем для дропа доступны только определенные ячейки дерева (в медиаплеере, нужно реализовать перетаскивание из списка воспроизведения на список плейлистов. Но кроме списка плейлистов, там есть собственно заголовок списка, а также медиатека - ака музыка/видео, туда перетаскивать не надо). Сейчас сделал при помощи itemAt() и проверку на парента (что он равен заголовку "Плейлисты"). Есть ли более прямой способ? И в каком формате хранится mimeData dra&drop'a между тривиджетами по умолчанию? (глядел сорцы qt, там вроде хранится список индексов выделенных строк, это так?)


Название: Re: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Авварон от Апрель 13, 2009, 21:51
собственно так и оставил, ибо в сорцах qabstractitemview сделано похоже. Однако возник следующий вопрос - как сделать черную рамку вокруг выделяемого элемента. В сорцах же юзается d->dropIndicatorRect, где d получается из макроса Q_D(QAbstractItemView); Но использовать его не получается, тк приватный. Как быть?
И еще нашел баг - когда QTreeWidget находится в фокусе, то DragEnter срабатывает черт знает по какому принципу (то бишь не сразу, иногда можно достаточно долго водить по виджету, пока пройдет событие). Система - mac os 10.5, qt 4.5.0


Название: Re: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Пантер от Апрель 15, 2009, 22:58
Еще вопрос.
Есть у меня главное окно, на котором среди кучи виджетов зарыт QTreeView. Нужно иметь возможность дропать в QTreeView. За то, можно дропать или нет должен отвечать QTreeView, для этого переопределил метод dragMoveEvent. Но конечный дроп должно схватить главное окно, но этого не поисходит. Как в главном окне отловить дроп на QTreeView? Установить eventFilter не получится, так как QTreeView прямо не пренадлежит окну.


Название: Re: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Авварон от Апрель 16, 2009, 17:37
может добавить свой сигнал?:)


Название: Re: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Пантер от Апрель 16, 2009, 18:55
Решил проблему так: нафиг убрал из QTreeView все, что касается дропа и в главном окне в dragMoveEvent делаю так:
   
Код
C++ (Qt)
QTreeView* view=qobject_cast<QTreeView*>(this->childAt(event->pos())->parent());
if (view)
{
.............
}
В this->childAt(event->pos())->parent() приходится использовать parent из-за того, что this->childAt(event->pos()) выдает QAbstractScrollArea, родителем которой и является QTreeView.
А вот с рисованием курсора вокруг итема в драге так и не разобрался.


Название: Re: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Авварон от Апрель 16, 2009, 20:27
курсора в смысле рамки выделения когда наводишь с drag'ом?


Название: Re: очередной Drag&Drop (между QTreeWidget'ами)
Отправлено: Пантер от Апрель 17, 2009, 06:12
Оно самое.