PyQt5 позволяет выбирать элементы QListView при редактировании

Я пытаюсь получить события щелчка (в конечном счете, левый, правый и двойной щелчок), чтобы «передать» виджет редактора в базовый QListView, чтобы можно было сделать выбор. Фигурные фильтры событий, вероятно, были подходящим вариантом, но я немного смущен тем, где должны выполняться функция eventFilter (объект, событие) и вызов installEventFilter (), чтобы это произошло.

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

dataView=QListView(self)
dataView.setGeometry(self.rect())
dataView.setViewMode(1)
dataView.setMovement(0)
dataView.setSelectionMode(QAbstractItemView.ExtendedSelection)
dataView.setMouseTracking(True)
dataView.entered.connect(dataView.edit)

delegate=CustomDelegate(self)
dataModel=QStandardItemModel(self)

dataView.setModel(dataModel)
dataView.setItemDelegate(delegate)

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

В моем делегате я должен создать редактор таким образом и подключить сигналы для обновления моих данных (фреймов) в моей модели, чтобы изменить способ отображения делегата и закрыть редактор.

def createEditor(self,parent,option,index):
    editor=TestEditor(parent)
    editor.editingFinished.connect(self.deleteEditor)
    editor.updateFrame.connect(self.updateFrames)
    return editor

Где мне создать свой фильтр событий? Где я создаю свой QListView? В пользовательском QListView? Внутри моего делегата? Или в моем виджете редактора? И где тогда я бы назвал installEventFilter ()?


person Alex Rideout    schedule 14.02.2018    source источник


Ответы (1)


Оказывается, в моем случае QListView не реагировал на щелчки выбора, потому что, когда вы вызываете функцию edit (), состояние средства просмотра меняется на «QAbstractItemView.EditingState», и в этом состоянии, по-видимому, выбор отключен. Я только что создал подкласс QListView и добавил функцию beginEdit.

class CustomList(QListView):
    def __init__(self,parent=None):
        super().__init__(parent)

    def beginEdit(self,index):
        state=self.state()
        self.edit(index)
        self.setState(state)

А потом просто подключил это вместо редактирования.

dataView=CustomList(self)
dataView.entered.connect(dataView.beginEdit)
person Alex Rideout    schedule 14.02.2018