crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QAbstractItemModel и Drag and Drop
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
poluna Дата 28.12.2015, 10:15
  Кажется я поняла, что нужно сделать, попробую.
lanz Дата 25.12.2015, 15:33
 
Цитата
Есть эти флаги

Чтото вы меня дурите:
def flags(self, index):
        if index.isValid():
            defaultFlags=QtCore.QAbstractItemModel.flags(self, index)
            return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled | defaultFlags
        return None

Если индекс невалидный(root), код выше вернет None.
poluna Дата 25.12.2015, 15:03
  Есть эти флаги, пришлось перейти на QStandardItemModel, там такой проблемы нет.
lanz Дата 24.12.2015, 9:19
  Посмотрите исходники:
https://github.com/qtproject/qtbase/blob/de...mview.cpp#L1995
https://github.com/qtproject/qtbase/blob/de...emview_p.h#L308

В вашем случае rootIndex это невалидный индекс, а ваша модель не врозвращает для невалидных индексов никаких флагов:
def flags(self, index):
        if index.isValid():
            defaultFlags=QtCore.QAbstractItemModel.flags(self, index)
            return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled | defaultFlags
        return None

Вам нужно возвращать правильные флаги для невалидного индекса (и обрабатывать дроп на невалидный индекс).
poluna Дата 23.12.2015, 14:00
  Привет всем.
Снова я к вам со своими проблемами. :)

Есть два QTreeView, они используют модель производную от QAbstractItemModel.
Проблема в том, что при перетаскивании item'а из одного дерева в другое, появляется разрешающая иконка только в том случае, если этот item навести непосредственно на другой item в дереве.
Если item будет над самим QTreeView, то иконка будет запрещающей.

Все сделано по документации: Использование Drag and Drop с представлениями элементов
У обоих деревьев есть:
self._groupList = QtGui.QTreeView()
self._groupList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self._groupList.setDragEnabled(True)
self._groupList.setAcceptDrops(True)
self._groupList.setDropIndicatorShown(True)
В модели переопределены:
def flags(self, index):
        if index.isValid():
            defaultFlags=QtCore.QAbstractItemModel.flags(self, index)
            return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled | defaultFlags
        return None

def supportedDropActions(self):
        return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction


В чем может быть проблема ума не приложу! :(
Должна быть возможность бросать item непосредственно в само окно QTreeView, без наведения на другой item.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 20.4.2024, 7:51