2015-09-15 3 views
0

My TreeView имеет различную папку с детьми. у каждого ребенка есть значок и текстовое имя. пользователь может выбрать один или несколько элементов и перетащить их в область QMDI. как изображение для моей капли darg у меня есть местное изображение drag-> setPixmap (QPixmap (myPixImage)). Мне нужно: как я выделяю выбранный элемент со значком и текстом в качестве myPixImage динамически.Qt Drag and Drop QTreeView

ответ

2

Легко установить pixmap, когда ваш собственный код создает объект QDrag, однако с помощью QXxxViews (а не только QTreeView) вы управляете только QMimeData (при переопределении QAbstractItemModel :: mimeData()).

Поэтому, если вам это действительно нужно, единственный способ, которым я теперь являюсь подкласс QTreeView, переопределять (ну ... reimplenting) mouseMoveEvent() и тому подобное. Если вы это сделаете, вы можете получить выбранные элементы при создании QDrag через, например. selectionModel() -> SelectedItems().

0

Прежде всего: нет простого способа сделать это. В основном потому, что QDrag::exec запускается, когда вы (как разработчик) допускаете начало перетаскивания (пример here), и он не возвращается до завершения перетаскивания.

Вы хотите изменить QDrag объект пока перетаскивание.

Ваш лучший вариант здесь:

  1. После создания Drag объекта и перед тем работает QDrag::exec сохранить объект в некотором бассейне, которые могут быть доступны в любом месте в коде. Возможно, что-то вроде static map<QDrag *> pool
  2. Настройте периодическое событие QTimer, которое постоянно обновляет объект QDrag, который можно получить из пула. Do не попробуйте использовать Qthread, так как вы в конце концов столкнетесь с некоторой ошибкой «QObject не может быть перенесена из/в поток».
  3. Когда сопротивление лет закончились (как пользователь), очистить объект из пула

ли ум, что вы будете иметь визуально настройте QTimer повторяющихся событий соответственно.