Столкнулся со следующими проблемами при попытке использовать 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();
...
}