Я создал пользовательский QGraphicsView
с определенным поведением для определенных событий нажатия клавиш. В представлении отображается QGraphicsScene
с QGraphicsProxyWidgets
.
. Проблема в том, что как только я переопределяю keyPressEvent
в представлении, события не передаются виджетам, поэтому я могу ' введите текстовое поле. Я хочу, чтобы виджеты украли keyPressEvents, когда они сфокусированы.
Я попытался установить флаг ItemIsFocusable
для прокси-виджетов и установить политику фокусировки на StrongFocus
, среди прочего. Пока не повезло.
У кого-нибудь есть предложения? Я иду по этому поводу неправильно? Спасибо за внимание!
import sys
from Qt import QtWidgets, QtCore
class CustomView(QtWidgets.QGraphicsView):
def __init__(self, parent):
super(CustomView, self).__init__(parent)
def keyPressEvent(self, event):
if event.key() in (QtCore.Qt.Key_Delete, QtCore.Qt.Key_Backspace):
print('Deleting')
app = QtWidgets.QApplication(sys.argv)
groupBox = QtWidgets.QGroupBox("Contact Details")
numberLabel = QtWidgets.QLabel("Telephone number")
numberEdit = QtWidgets.QLineEdit()
layout = QtWidgets.QFormLayout()
layout.addRow(numberLabel, numberEdit)
groupBox.setLayout(layout)
scene = QtWidgets.QGraphicsScene()
proxy = scene.addWidget(groupBox)
proxy.setFlag(QtWidgets.QGraphicsItem.ItemIsFocusable)
proxy.setFocusPolicy(QtCore.Qt.StrongFocus)
view = CustomView(scene)
view.show()
app.exec_()