#include "designerScene.h" #include "util/selectorManager.h" #include #include DesignerScene::DesignerScene(QObject *parent) : QGraphicsScene(parent) { m_bGridVisible = true; m_pView = nullptr; } DesignerScene::~DesignerScene() { } void DesignerScene::drawBackground(QPainter* painter, const QRectF& rect) { QGraphicsScene::drawBackground(painter, rect); painter->fillRect(sceneRect(), Qt::white); if(!m_bGridVisible) return; QRectF sceneRect = this->sceneRect(); QPen pen; pen.setBrush(Qt::darkCyan);//藏青色 pen.setStyle(Qt::DashLine); pen.setWidthF(0.2); painter->setPen(pen); int nGridSpace = 20; //暂时写死 //竖线 for(int nX = sceneRect.left(); nX < sceneRect.right(); nX += nGridSpace) painter->drawLine(nX,sceneRect.top(),nX,sceneRect.bottom()); //横线 for(int nY = sceneRect.top(); nY < sceneRect.bottom(); nY += nGridSpace) painter->drawLine(sceneRect.left(),nY,sceneRect.right(),nY); //补齐最后两条 painter->drawLine(sceneRect.right(), sceneRect.top(), sceneRect.right(), sceneRect.bottom()); painter->drawLine(sceneRect.left(), sceneRect.bottom(), sceneRect.right(), sceneRect.bottom()); } void DesignerScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(SelectorManager::getInstance()) { SelectorManager::getInstance()->getWorkingSelector()->mousePressEvent(mouseEvent, this); update(); } else QGraphicsScene::mousePressEvent(mouseEvent); } void DesignerScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(SelectorManager::getInstance()) { SelectorManager::getInstance()->getWorkingSelector()->mouseMoveEvent(mouseEvent, this); update(); } else QGraphicsScene::mouseMoveEvent(mouseEvent); } void DesignerScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(SelectorManager::getInstance()) { SelectorManager::getInstance()->getWorkingSelector()->mouseReleaseEvent(mouseEvent, this); update(); } else QGraphicsScene::mouseReleaseEvent(mouseEvent); } void DesignerScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(SelectorManager::getInstance()) { SelectorManager::getInstance()->getWorkingSelector()->mouseDoubleClickEvent(mouseEvent, this); update(); } else QGraphicsScene::mouseReleaseEvent(mouseEvent); } void DesignerScene::keyPressEvent(QKeyEvent* event) { QGraphicsScene::keyPressEvent(event); } void DesignerScene::keyReleaseEvent(QKeyEvent* event) { QGraphicsScene::keyReleaseEvent(event); } void DesignerScene::setGridVisible(bool bVisible) { m_bGridVisible = bVisible; update(); } void DesignerScene::callParentEvent(QGraphicsSceneMouseEvent* mouseEvent) { //调用QGraphicsScene的函数,会直接触发一些操作,比如取消item的selected状态,从而触发item的一些函数(itemChange),然后在item的相应函数中书写执行一些操作 switch (mouseEvent->type()) { case QEvent::GraphicsSceneMousePress: QGraphicsScene::mousePressEvent(mouseEvent); break; case QEvent::GraphicsSceneMouseMove: QGraphicsScene::mouseMoveEvent(mouseEvent); break; case QEvent::GraphicsSceneMouseRelease: QGraphicsScene::mouseReleaseEvent(mouseEvent); break; default: break; } }