Столкнулся со следующими проблемами при попытке использовать QMenu как редактор делегата:
- координаты меню нельзя устанавливать в методе createEditor()
- непонятно, как узнать какой из актов выбран в субменю [в методе setModelData(), act2 всегда равен нулю; act1 имеет корректное значение]
QWidget *TableDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  ...
  return new QMenu(parent);
  ...
}
void TableDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
  ...
  QMenu *menu = qobject_cast<QMenu *>(editor);
  ...
  for(int i = 0; i != model.rowCount(); ++i)
  {
    QModelIndex group = model.index(i, 0);
    QMenu *subMenu = menu->addMenu(group.data().toString());
    for(int j = 0; j != model.rowCount(group); ++j)
      subMenu->addAction(model.index(j, 0, group).data().toString());
  }
  ...
}
void TableDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
  ...
  QMenu *menu = qobject_cast<QMenu *>(editor);
  QAction *act1 = menu->activeAction();
  QMenu *subMenu = act1->menu();
  QAction *act2 = subMenu->activeAction();
  ...
}