Я пытаюсь заставить QStyledItemDelegate вести себя как пользовательский QWidget, который я написал, поэтому я могу переключить свой код на подход модели/представления.Как использовать пользовательский виджет с событиями/сигналами как QStyledItemDelegates?
Пользовательский QWidget представляет собой сложную кнопку, которая показывает четыре «суб-кнопки» в своих углах над мышью (так что всего в ней пять сигналов). Это также перетащить & с возможностью перемещения с помощью настраиваемой пиксельной карты. Для этого я использую mousePressEvent, mouseReleaseEvent, mouseMoveEvent, enterEvent и leaveEvent. Это то, что она выглядит с и без «вспомогательных кнопок», показанных при наведении мышей:
С тех пор я переключил свой основной код, чтобы использовать модель/представление подход, и я пытаюсь использовать этот виджет как QStyledItemDelegate для мой индивидуальный ListView. Я попытался назначить пользовательский виджет как редактор, как это:
class ToolButtonDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
super(ToolButtonDelegate, self).__init__(parent)
self.parent = parent
def createEditor(self, parent, option, index):
if not index.isValid():
return False
btn = FancyButton(index.data(Qt.UserRole), parent=parent)
return btn
Это кажется перспективным, как он рисует класс «FancyButton» для пункта I щелкнул. Тем не менее, мне нужно, чтобы это было мышью над событием. После немного больше исследований я попытался подключить слот QAbstractItemView.entered к QAbstractItemView.edit сигнала:
self.entered.connect(self.edit)
Это работает только для первого элемента я двигаю курсор мыши над, то я получаю эти ошибки:
edit: editing failed
Так что теперь я застрял снова с этими проблемами:
- как правильно закрыть редактор (нет «QAbstractItemView.leave» событие или подобное).
- как обеспечить, чтобы щелчки мыши фактически вызвать кнопки в классе FanyButton, а не просто взаимодействовать с QAbstractIremView
У меня есть чувство, что я заголовок в неправильном направлении здесь, так что любая помощь будет очень оценили.
Приветствия, откровенны
Функция drag & drop явно работает, но я не вижу способа назначить любой из этих фильтров событий. Например. как я могу поймать ввод мыши и оставить событие для элемента в структуре модели/представления? –
Кто-нибудь? Я немного застрял с этим сейчас. Мне в основном нужно нарисовать существующий пользовательский виджет со всеми его событиями мыши в (или как) делегат элемента. У меня есть мыши над эффектами, а drag & drop работает над виджетами, но не знаю, как использовать его в своем представлении как делегат сейчас. –
@FrankRuer. Как насчет отправки вашего решения в качестве приемлемого ответа? ;-) – Beachwalker