code: def removeItems(self, items):
          
          count = 0
          self._removalQueue = items
          blocked = self.signalsBlocked()
          self.blockSignals(True)
          update = set()
          for item in items:
              if isinstance(item, XNodeConnection):
                  update.add(item.inputNode())
                  update.add(item.outputNode())
              
              if self.removeItem(item):
                  count += 1
          
          self.blockSignals(blocked)
          self._removalQueue = []
          
          # update any existing nodes once the connections have been removed
          for node in update.difference(items):
              node.setDirty(True)
          
          if not self.signalsBlocked():
              self.itemsRemoved.emit()
          
          return count
docs: Removes all the inputed items from the scene at once.  The \
          list of items will be stored in an internal cache.  When \
          updating a node or connection's prepareToRemove method, \
          any additional items that need to be removed as a result \
          of that object being removed, should use the \
          scene.forceRemove method which will keep track of all the \
          items queued up to remove, so it won't be removed twice.
          
          :sa         forceRemove
          
          :param      items       <list> [ <QGraphicsItem>, .. ]
          
          :return     <int> number removed