1. чтобы можно на 3-ем шаге кликать по комбобоксу и 4-ый шаг пробегал автоматом (главное)
Это элементарно. 
C++ (Qt)
QWidget * MyTableDelegate::createEditor(QWidget * parent,
                                        const QStyleOptionViewItem & ,
                                        const QModelIndex & idx) const
{
      QComboBox * box = new QComboBox(parent);
      connect(box, SIGNAL(currentIndexChanged(int)), this, SLOT(closeCombo()));
      return box;
}
 
void MyTableDelegate::closeCombo()
{
   QComboBox * bx = qobject_cast<QComboBox *>(sender());
   if (bx)
   {
      emit commitData(bx); //фиксировать данные
      emit closeEditor(bx); // здесь вторым параметром можно задать поведение - перейти на след или пред ячейку либо же ничего не делать, просто закрыть редактор
   }
}
 
 
С тем чтобы комбобокс сразу раскрывался пришлось немного заморочиться. 
Пришлось ставить коннект самому себе причем с постановкой обработки в очередь.
Короче код такой:
C++ (Qt)
MyTableDelegate::MyTableDelegate(QObject *parent)
: QItemDelegate(parent)
{
   connect(this, SIGNAL(showComboPopup(QComboBox *)), 
      this, SLOT(openComboPopup(QComboBox *)),
      Qt::QueuedConnection); // именно Qt::QueuedConnection - это важно!
}
 
void MyTableDelegate::openComboPopup(QComboBox * bx)
{
   bx->showPopup();
}
 
QWidget * MyTableDelegate::createEditor(QWidget * parent,
                                        const QStyleOptionViewItem & ,
                                        const QModelIndex & idx) const
{
      QComboBox * box = new QComboBox(parent);
      connect(box, SIGNAL(currentIndexChanged(int)), this, SLOT(closeCombo()));
      emit showComboPopup(box);
      return box;
}
 
//В классе объявления
signals:
   void showComboPopup(QComboBox *) const;
protected slots:
   void closeCombo();
   void openComboPopup(QComboBox *);