请帮我写一个MGraphicsScene类,继承QGraphicsScene
时间: 2024-10-16 10:10:16 浏览: 23
Qt5学习:常见类继承关系 简明示意图.pdf
当你需要创建一个自定义的QGraphicsScene子类时,你可以按照以下步骤编写MGraphicsScene类。这个例子中我们将添加一些额外的功能,如处理鼠标按下和释放事件,并在画布上显示自定义形状。首先,确保已经包含了所需的头文件:
```cpp
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPainterPath>
#include <QMouseEvent>
class MGraphicsShapeItem : public QGraphicsRectItem {
public:
MGraphicsShapeItem(QGraphicsScene *parent = nullptr)
: QGraphicsRectItem(parent) {}
};
class MGraphicsScene : public QGraphicsScene {
public:
explicit MGraphicsScene(QWidget *parent = nullptr)
: QGraphicsScene(parent), shapeColor(Qt::red) {}
void mousePressEvent(QGraphicsSceneMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
auto shape = std::make_unique<MGraphicsShapeItem>();
shape->setPen(QPen(shapeColor));
shape->setBrush(QBrush(shapeColor));
scenePosToItem(event->scenePos(), shape.get());
addItem(shape.release());
}
QGraphicsScene::mousePressEvent(event);
}
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override {
QGraphicsScene::mouseReleaseEvent(event);
// 这里可以根据实际需求添加鼠标松开后的操作,例如删除形状
// deleteItemUnderMouse(); // 如果你想删除鼠标下的形状
}
protected:
QColor shapeColor; // 自定义形状的颜色
};
```
在这个MGraphicsScene类中,我们创建了一个子类MGraphicsShapeItem用于显示自定义形状,以及在鼠标左键点击时动态创建并放置形状。同时,还覆盖了鼠标按下和释放事件,以便在用户交互时响应。
阅读全文