'Return an iterator that iterates first through the items that directly intersect point (in Z order)
followed by any other items that are within the scene\'s click radius.'

def itemsNearEvent(self, event, selMode=QtCore.Qt.IntersectsItemShape, sortOrder=QtCore.Qt.DescendingOrder, hoverable=False):

    view = self.views()[0]
    tr = view.viewportTransform()
    r = self._clickRadius
    rect = view.mapToScene(QtCore.QRect(0, 0, (2 * r), (2 * r))).boundingRect()
    seen = set()
    if hasattr(event, 'buttonDownScenePos'):
        point = event.buttonDownScenePos()
    else:
        point = event.scenePos()
    w = rect.width()
    h = rect.height()
    rgn = QtCore.QRectF((point.x() - w), (point.y() - h), (2 * w), (2 * h))
    items = self.items(point, selMode, sortOrder, tr)
    items2 = []
    for item in items:
        if (hoverable and (not hasattr(item, 'hoverEvent'))):
            continue
        shape = item.shape()
        if (shape is None):
            continue
        if shape.contains(item.mapFromScene(point)):
            items2.append(item)
    def absZValue(item):
        if (item is None):
            return 0
        return (item.zValue() + absZValue(item.parentItem()))
    sortList(items2, (lambda a, b: cmp(absZValue(b), absZValue(a))))
    return items2
