I have this in my inherited GraphicsScene:
Qt Code:
  1. void MyGraphicsScene::mousePressEvent ( QGraphicsSceneMouseEvent * event )
  2. {
  3. event->ignore();
  4.  
  5. // Reset selectionArea
  6. setSelectionArea(QPainterPath());
  7.  
  8. // Always remember to call parents mousePressEvent
  9. QGraphicsScene::mousePressEvent(event);
  10. }
To copy to clipboard, switch view to plain text mode 

and

Qt Code:
  1. void MyGraphicsScene::mouseReleaseEvent ( QGraphicsSceneMouseEvent * event )
  2. {
  3. event->ignore();
  4.  
  5. bool ctrl = (event->modifiers() == Qt::ControlModifier);
  6.  
  7. QPainterPath tmpPath = selectionArea();
  8. if(tmpPath.isEmpty())
  9. {
  10. // if ctrl pressed, then toggle selection
  11. emit select(event->scenePos(), ctrl);
  12. }
  13. else
  14. {
  15. // if ctrl pressed, then add selection
  16. emit select(tmpPath, ctrl);
  17. }
  18.  
  19. // Always remember to call parents mousePressEvent
  20. QGraphicsScene::mouseReleaseEvent(event);
  21.  
  22. }
To copy to clipboard, switch view to plain text mode 
I just inherited QGraphicsScene locally just to re-implement these two functions. This is the complete code I use in these two functions. You may not need all, but what I do, is to emit the signal with the path (selection rectangle) and if the user has pressed ctrl (adding elements)

Hope this helps and I didn't misunderstand your question.