Привет всем.
Снова я к вам со своими проблемами.
Есть два QTreeView, они используют модель производную от QAbstractItemModel.
Проблема в том, что при перетаскивании item'а из одного дерева в другое, появляется разрешающая иконка только в том случае, если этот item навести непосредственно на другой item в дереве.
Если item будет над самим QTreeView, то иконка будет запрещающей.
Все сделано по документации: http://www.doc.crossplatform.ru/qt/4.3.2/model-view-dnd.html
У обоих деревьев есть:
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
Посмотрите исходники:
https://github.com/qtproject/qtbase/blob/dev/src/widgets/itemviews/qabstractitemview.cpp#L1995
https://github.com/qtproject/qtbase/blob/dev/src/widgets/itemviews/qabstractitemview_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
Есть эти флаги, пришлось перейти на QStandardItemModel, там такой проблемы нет.
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
Кажется я поняла, что нужно сделать, попробую.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)