#if 1 #include "picscene.h" #include #include PicScene::PicScene(QObject *parent) : QGraphicsScene(parent) { } void PicScene::setMode(Mode mode) { myMode = mode; } void PicScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) { if (mouseEvent->button() != Qt::LeftButton) return; QGraphicsScene::mousePressEvent(mouseEvent); } //! [9] //! [10] void PicScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) { #if 0 if (myMode == InsertLine && line != 0) { QLineF newLine(line->line().p1(), mouseEvent->scenePos()); line->setLine(newLine); } else if (myMode == MoveItem) { QGraphicsScene::mouseMoveEvent(mouseEvent); } #else QGraphicsScene::mouseMoveEvent(mouseEvent); #endif } //! [10] //! [11] void PicScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) { #if 0 //不需要这个功能 if (line != 0 && myMode == InsertLine) { QList startItems = items(line->line().p1()); if (startItems.count() && startItems.first() == line) startItems.removeFirst(); QList endItems = items(line->line().p2()); if (endItems.count() && endItems.first() == line) endItems.removeFirst(); removeItem(line); delete line; //! [11] //! [12] if (startItems.count() > 0 && endItems.count() > 0 && startItems.first()->type() == DiagramItem::Type && endItems.first()->type() == DiagramItem::Type && startItems.first() != endItems.first()) { DiagramItem *startItem = qgraphicsitem_cast(startItems.first()); DiagramItem *endItem = qgraphicsitem_cast(endItems.first()); Arrow *arrow = new Arrow(startItem, endItem); arrow->setColor(myLineColor); startItem->addArrow(arrow); endItem->addArrow(arrow); arrow->setZValue(-1000.0); addItem(arrow); arrow->updatePosition(); } } //! [12] //! [13] line = 0; #endif QGraphicsScene::mouseReleaseEvent(mouseEvent); //QRectF Rect=QGraphicsScene.itemsBoundingRect(); //qDebug()<<"GraphicsScene itemsBoundingRect "<type() == type) return true; } return false; } //! [14] void PicScene::keyPressEvent(QKeyEvent *event) { QGraphicsScene::keyPressEvent(event); } #endif