Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QAbstractItemModel и Drag and Drop
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
poluna
Привет всем.
Снова я к вам со своими проблемами. :)

Есть два 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.
lanz
Посмотрите исходники:
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
Есть эти флаги, пришлось перейти на QStandardItemModel, там такой проблемы нет.
lanz
Цитата
Есть эти флаги

Чтото вы меня дурите:
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
Кажется я поняла, что нужно сделать, попробую.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.