qt qgraphicsview 鼠标左键选中弹出对话框
时间: 2023-07-05 20:07:50 浏览: 244
您可以通过重写 `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` 对象,并显示了窗口。当单击矩形时,将弹出一个对话框,提示用户输入一些文本。
阅读全文