Я пытаюсь получить события щелчка (в конечном счете, левый, правый и двойной щелчок), чтобы «передать» виджет редактора в базовый 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 ()?