qgraphicsview qt 设置右键框选只画框不选中
时间: 2023-11-01 16:10:43 浏览: 228
要实现只画框不选中的右键框选功能,可以通过以下步骤来实现:
1. 重载 `QGraphicsView` 的 `mousePressEvent` 和 `mouseReleaseEvent` 函数,记录鼠标按下和释放的位置,并在这两个位置之间绘制一个矩形框选区域。
2. 在 `mouseReleaseEvent` 中获取框选区域内的所有图形项,但不进行选中操作。
下面是一个简单的示例代码:
```cpp
class MyGraphicsView : public QGraphicsView {
public:
MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent) {}
protected:
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::RightButton) {
rubberBandStartPos = event->pos();
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
rubberBand->setGeometry(QRect(rubberBandStartPos, QSize()));
rubberBand->show();
}
QGraphicsView::mousePressEvent(event);
}
void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::RightButton) {
rubberBand->hide();
QRect rect = QRect(rubberBandStartPos, event->pos()).normalized();
QList<QGraphicsItem*> items = items(rect);
// TODO: 处理选中的图形项
delete rubberBand;
}
QGraphicsView::mouseReleaseEvent(event);
}
private:
QPoint rubberBandStartPos;
QRubberBand *rubberBand = nullptr;
};
```
在上面的代码中,我们首先在鼠标按下事件中记录了起始位置,并创建了一个 `QRubberBand` 对象,用于绘制矩形框选区域。
在鼠标释放事件中,我们获取框选区域内的所有图形项,并进行相应的处理。这里我们只是简单地将选中的图形项放到了一个 `QList` 中,你可以根据实际需求进行操作。
注意,这里我们调用了基类的 `mousePressEvent` 和 `mouseReleaseEvent` 函数,以确保其他事件的正常处理。
阅读全文