Qt, что нужно сделать для пользовательской модели, чтобы включить drop? - PullRequest
3 голосов
/ 09 сентября 2011

Я пытаюсь включить сброс для пользовательской модели, которую я подключил к QTreeView.

Я сделал следующее:

  • Гарантировано, что acceptDrops включенв QTreeView
  • Реализовано в моей пользовательской модели supportedDropActions до return Qt::CopyAction | Qt::MoveAction
  • Реализовано в моей пользовательской модели mimeType s для возврата QStringList с text / uri-list
  • Реализовано в моей пользовательской модели dropMimeData для обработки сброса, если оно когда-либо произошло.

Это все, что мне нужно, чтобы заставить его работать на QTreeWidget.

Я перешел к:

  • Реализованы флаги для return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled;

Тем не менее, когда я запускаю свое приложение и пытаюсь перетащить файл в Windowsна мой QTreeView, я просто получаю, что недопустимый круг в стиле Охотников за привидениями с косой чертой.

Что еще мне нужно сделать, чтобы включить дропс?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Наконец-то понял это сам.

Оказывается, проблема была в том, что в функции flags в случае недопустимых индексов мне не удалось вернуть флаг ItemIsDropEnabled. Недопустимый индекс - это сигнал для корневого узла, то есть области представления, где не было элементов, и поэтому пустое пространство не могло быть сброшено.

Это было трудно обнаружить, потому что я пытался использовать перетаскивание, чтобы добавить элементы в свое дерево, и поэтому не было ни одного без работающего перетаскивания, то есть все, что я видел, это круг с косой чертой.

0 голосов
/ 16 сентября 2011

Для тех, кто сталкивается с подобными проблемами, я хочу отметить, что необходимо возвращать Qt::CopyAction среди поддерживаемых действий отбрасывания.Qt::MoveAction само по себе не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...