Отнаследоваться от QTreeView, создать в нем нужные меню. Далее, в mousePressEvent() смотреть на кнопку мыши и на индекс методом indexAt(). Отличать индексы по нужным параметрам (вложенность, столбец и т. д.), двигать нужное меню в нужную точку и показывать. Как один из вариантов. Может и чего еще придумать можно, но я так бы сделал.
mousePressEvent() не корректно обрабатывать поскольку контекстное меню можно вызвать клавиатурой. Для этих целей есть
C++ (Qt)
void QWidget::contextMenuEvent ( QContextMenuEvent * event ) [virtual protected]
Еще можно установить contextMenuPolicy в Qt::CustomContextMenu и ловить сигнал
C++ (Qt)
void QWidget::customContextMenuRequested ( const QPoint & pos ) [signal]