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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeWidget. Игнорировать QDropEvent.  (Прочитано 4538 раз)
hadey
Гость
« : Март 02, 2012, 14:04 »

Пытаюсь отловить событие Drop на TreeWidget. Установил фильтр ui->trWdtAdmTree->viewport()->installEventFilter(this); , в eventFilter пытаюсь прервать событие aEvent->ignore(); , но элемент все равно добавляется в дерево. В чем может быть ошибка?
Записан
Bepec
Гость
« Ответ #1 : Март 02, 2012, 14:07 »

А в дизайнере галочку убрать не судьба? Улыбающийся там в свойствах вроде есть аналог enableDragAndDrop.
Записан
hadey
Гость
« Ответ #2 : Март 02, 2012, 14:22 »

Есть dragEnabled и dragDropMode, если Вы это имели ввиду. Но мне не надо полностью отключить Drop, мне нужно его обработать: вызвать другую форму, внести изменения в БД и потом проигнорировать событие, т.к. я сам добавляю узел вручную.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 02, 2012, 14:32 »

А почему нельзя просто перегрузить QTreeWidget::dropEvent()  Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
hadey
Гость
« Ответ #4 : Март 02, 2012, 14:45 »

Пробовал, почему то не вызывается. И патом: чем перегрузка лучше установки фильтра?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #5 : Март 02, 2012, 14:46 »

в фильтре событий для игнорируемого события надо вовзращать true
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
hadey
Гость
« Ответ #6 : Март 02, 2012, 14:53 »

Да, то что нужно true возвращать я разобрался, но теперь другая проблема:  узел, на котором происходит drop остается как бы выделенным для операции Drop и дерево зависает.
« Последнее редактирование: Март 02, 2012, 15:04 от hadey » Записан
hadey
Гость
« Ответ #7 : Март 02, 2012, 15:13 »

Все, разобрался. Помогло вот это:
  QDropEvent* de = static_cast <QDropEvent*>(aEvent);
  de->setDropAction(Qt::IgnoreAction);
  return false;
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Март 02, 2012, 15:51 »

Все, разобрался. Помогло вот это:
  QDropEvent* de = static_cast <QDropEvent*>(aEvent);
  de->setDropAction(Qt::IgnoreAction);
  return false;
Ну вот , сделал бы всё это в перегруженном QTreeWidget::dropEvent() и кастить не пришлось бы и всё было-бы намного проще.
А навеска своего фильтра - это по сути хак.
Записан

Qt 5.11/4.8.7 (X11/Win)
hadey
Гость
« Ответ #9 : Март 02, 2012, 16:08 »

Я пробовал, но функция не вызывалась, не знаю в чем причина.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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