右键框选时模拟QGraphicsView::RubberBandDrag
时间: 2024-01-04 13:46:49 浏览: 77
QGraphicsView以鼠标点实现放大缩小、拖拽
您好,我理解您的问题是如何模拟QGraphicsView::RubberBandDrag。可以通过以下步骤实现:
1. 重写QGraphicsView的mousePressEvent和mouseMoveEvent方法。
2. 在mousePressEvent中记录鼠标按下的位置,并将RubberBand设为可见。
3. 在mouseMoveEvent中计算选框的大小和位置,并更新RubberBand的大小和位置。
4. 在mouseReleaseEvent中隐藏RubberBand,并根据选框的大小和位置选择相应的图形项。
以下是一个简单的示例代码:
```
class MyGraphicsView : public QGraphicsView {
public:
MyGraphicsView(QWidget* parent = nullptr) : QGraphicsView(parent) {
// 设置选择模式为框选
setDragMode(QGraphicsView::RubberBandDrag);
// 创建RubberBand
mRubberBand = new QRubberBand(QRubberBand::Rectangle, this);
mRubberBand->hide();
}
protected:
void mousePressEvent(QMouseEvent* event) override {
// 记录鼠标按下的位置
mStartPos = event->pos();
// 显示RubberBand
mRubberBand->setGeometry(QRect(mStartPos, QSize()));
mRubberBand->show();
}
void mouseMoveEvent(QMouseEvent* event) override {
// 计算选框的大小和位置
QRect rect(mStartPos, event->pos());
// 更新RubberBand的大小和位置
mRubberBand->setGeometry(rect.normalized());
}
void mouseReleaseEvent(QMouseEvent* event) override {
// 隐藏RubberBand
mRubberBand->hide();
// 根据选框的大小和位置选择图形项
QList<QGraphicsItem*> items = items(rect());
// ...
}
private:
QRubberBand* mRubberBand;
QPoint mStartPos;
};
```
希望能对您有所帮助!
阅读全文