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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: очередной Drag&Drop (между QTreeWidget'ами)  (Прочитано 5448 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« : Апрель 13, 2009, 12:37 »

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

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Апрель 13, 2009, 21:51 »

собственно так и оставил, ибо в сорцах qabstractitemview сделано похоже. Однако возник следующий вопрос - как сделать черную рамку вокруг выделяемого элемента. В сорцах же юзается d->dropIndicatorRect, где d получается из макроса Q_D(QAbstractItemView); Но использовать его не получается, тк приватный. Как быть?
И еще нашел баг - когда QTreeWidget находится в фокусе, то DragEnter срабатывает черт знает по какому принципу (то бишь не сразу, иногда можно достаточно долго водить по виджету, пока пройдет событие). Система - mac os 10.5, qt 4.5.0
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Апрель 15, 2009, 22:58 »

Еще вопрос.
Есть у меня главное окно, на котором среди кучи виджетов зарыт QTreeView. Нужно иметь возможность дропать в QTreeView. За то, можно дропать или нет должен отвечать QTreeView, для этого переопределил метод dragMoveEvent. Но конечный дроп должно схватить главное окно, но этого не поисходит. Как в главном окне отловить дроп на QTreeView? Установить eventFilter не получится, так как QTreeView прямо не пренадлежит окну.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Апрель 16, 2009, 17:37 »

может добавить свой сигнал?Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Апрель 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.
А вот с рисованием курсора вокруг итема в драге так и не разобрался.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Апрель 16, 2009, 20:27 »

курсора в смысле рамки выделения когда наводишь с drag'ом?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Апрель 17, 2009, 06:12 »

Оно самое.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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