QGraphicsView橡皮经选择实现
时间: 2024-04-29 15:18:15 浏览: 106
QGraphicsView 是 Qt 框架中的一个控件,可以用来显示 QGraphicsScene 中的图形项。而橡皮筋选择则是 QGraphicsView 中一个常用的功能,可以通过鼠标拖拽的方式来实现对场景中图形项的选择。
实现橡皮筋选择的方法如下:
1. 在 QGraphicsView 派生类中重载 mousePressEvent、mouseMoveEvent 和 mouseReleaseEvent 函数,在 mousePressEvent 函数中记录鼠标按下的位置,然后在 mouseMoveEvent 函数中更新橡皮筋框的位置,最后在 mouseReleaseEvent 函数中完成选择操作。
2. 在 QGraphicsView 派生类中添加一个成员变量 m_rubberBand,用于存储橡皮筋框的位置和大小。
3. 在 mousePressEvent 函数中创建一个 QRubberBand 对象,并将其设置为 m_rubberBand 成员变量,然后显示橡皮筋框。
4. 在 mouseMoveEvent 函数中更新橡皮筋框的位置和大小,可以使用 QRubberBand 的 move 和 resize 函数来实现。
5. 在 mouseReleaseEvent 函数中隐藏橡皮筋框,并遍历场景中的图形项,判断它们是否被包含在橡皮筋框内,如果是,则将其设置为选中状态。
以下是示例代码,仅供参考:
```
class MyGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
MyGraphicsView(QWidget *parent = nullptr);
protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
private:
QRubberBand *m_rubberBand;
QPoint m_origin;
};
MyGraphicsView::MyGraphicsView(QWidget *parent)
: QGraphicsView(parent)
{
setDragMode(QGraphicsView::RubberBandDrag);
}
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_origin = event->pos();
m_rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
m_rubberBand->setGeometry(QRect(m_origin, QSize()));
m_rubberBand->show();
}
}
void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
if (m_rubberBand) {
QRect rect = QRect(m_origin, event->pos()).normalized();
m_rubberBand->setGeometry(rect);
}
}
void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
if (m_rubberBand) {
m_rubberBand->hide();
QList<QGraphicsItem*> items = items(m_rubberBand->geometry());
foreach (QGraphicsItem *item, items) {
item->setSelected(true);
}
delete m_rubberBand;
m_rubberBand = nullptr;
}
}
```
阅读全文