gpt4 book ai didi

python - 重写的 QGraphicsView keyPressEvent 从聚焦的 QGraphicsWidgets 中窃取事件

转载 作者:行者123 更新时间:2023-12-04 10:37:19 26 4
gpt4 key购买 nike

我已经建立了一个自定义 QGraphicsView为某些按键事件定义了行为。 View 显示 QGraphicsSceneQGraphicsProxyWidgets .

问题是,一旦我覆盖了 keyPressEvent在 View 中,事件不会传递给小部件,因此我无法在文本框中键入内容。我希望小部件在聚焦时窃取 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_()

最佳答案

如果您覆盖一个方法并且不调用父类的实现,那么您将消除默认行为,在您的情况下将键盘事件发送到项目。

解决方法是通过super调用父类的keyPressEvent方法:

def keyPressEvent(self, event):
super(CustomView, self).keyPressEvent(event)
if event.key() in (QtCore.Qt.Key_Delete, QtCore.Qt.Key_Backspace):
print('Deleting')

关于python - 重写的 QGraphicsView keyPressEvent 从聚焦的 QGraphicsWidgets 中窃取事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60102859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com