重写QGraphicsView::RubberBandDrag 实现不选中graphicsItem
时间: 2024-01-07 16:02:29 浏览: 154
要重写QGraphicsView::RubberBandDrag以实现不选中graphicsItem,可以在派生类中重写该函数,并在函数中调用父类的实现。然后在子类中处理选中的图形项,以便不选中它们。具体实现可以参考以下示例代码:
```c++
class CustomGraphicsView : public QGraphicsView
{
public:
CustomGraphicsView(QWidget* parent = nullptr) : QGraphicsView(parent) {}
protected:
void rubberBandDrag(QRect viewportRect, QPoint, QPoint) override
{
QGraphicsView::rubberBandDrag(viewportRect, QPoint(), QPoint());
QList<QGraphicsItem*> items = scene()->items(mapToScene(viewportRect), Qt::IntersectsItemShape, Qt::AscendingOrder);
for (QGraphicsItem* item : items) {
if (item->type() == QGraphicsItem::Type::GraphicsItemGroup) {
QGraphicsItemGroup* group = static_cast<QGraphicsItemGroup*>(item);
for (QGraphicsItem* groupItem : group->childItems()) {
groupItem->setSelected(false);
}
}
else {
item->setSelected(false);
}
}
}
};
```
在这个示例中,我们首先调用父类的实现以选择图形项。然后,我们获取视口矩形内的图形项列表,并遍历该列表以取消选择。如果图形项是一个组,则我们遍历组中的所有子项并取消选择它们。最后,我们调用每个图形项的setSelected函数并将其设置为false,以取消选择它们。这样就可以实现不选中图形项的RubberBandDrag函数了。
阅读全文