QGraphicsView中鼠标事件的提示

本文讲述了在QTQGraphicsView中,如何处理鼠标点击事件,确保底层item的点击不会被顶层事件屏蔽。重点介绍了如何在顶层类中正确处理press和doubleClick事件,以保证事件的正常传递。
摘要由CSDN通过智能技术生成

在QT QGraphicsView中 鼠标点击在某个位置时,先响应最顶层的鼠标事件然后其他item的鼠标点击事件就会被屏蔽。讲人话就是如果你点击在某一块地方鼠标没有响应,可以在他的上一层类中加入QGraphicsView::mousePressEvent(event);类似于这样的语句,他的意思就是将事件继续传递下去。

需要注意的是,如果在顶层类pressEvent中你加了这句话,但是你还在顶层类中重写了doubleClicked函数,那么你双击某个下层item所在的位置时只有一次press会传递,第二次点击事件会被doubleclicked捕获,所以需要在doubleClicked中加入QGraphicsView::mouseDoubleClickedEvent(event);这句话才可以。

您可以通过重写 `QGraphicsView` 类的 `mousePressEvent()` 方法来实现鼠标左键选图形项并弹出对话框的功能。以下是一个简单的示例代码: ```python from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsRectItem, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton from PyQt5.QtCore import Qt class MyView(QGraphicsView): def __init__(self): super().__init__() self.setScene(QGraphicsScene(self)) self.rect = QGraphicsRectItem(0, 0, 100, 100) self.rect.setFlags(QGraphicsItem.ItemIsSelectable) self.scene().addItem(self.rect) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: items = self.scene().selectedItems() if self.rect in items: dialog = QDialog() layout = QVBoxLayout(dialog) label = QLabel("Please input some text:") layout.addWidget(label) line_edit = QLineEdit() layout.addWidget(line_edit) ok_button = QPushButton("OK") layout.addWidget(ok_button) ok_button.clicked.connect(dialog.accept) dialog.exec_() super().mousePressEvent(event) if __name__ == '__main__': app = QApplication([]) view = MyView() view.show() app.exec_() ``` 在这个示例,我们创建了一个继承自 `QGraphicsView` 的 `MyView` 类。在 `__init__()` 方法,我们创建了一个 `QGraphicsRectItem` 并将其添加到场景。我们还将其设置为可选状态。 在 `mousePressEvent()` 方法,我们检查鼠标事件是否是左键单击事件。如果是,我们检查场景是否有选的图形项。如果 `self.rect` 被选,我们创建一个 QDialog 对象,并在其添加了一个标签、一个文本框和一个按钮。点击“OK”按钮时,我们关闭对话框。 最后,我们在 `main` 函数创建了应用程序对象、`MyView` 对象,并显示了窗口。当单击矩形时,将弹出一个对话框,提示用户输入一些文本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值