Russian Qt Forum

Qt => Model-View (MV) => Тема начата: fear от Март 29, 2009, 18:29



Название: QMenu as delegate editor
Отправлено: fear от Март 29, 2009, 18:29
Столкнулся со следующими проблемами при попытке использовать 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();
  ...
}


Название: Re: QMenu as delegate editor
Отправлено: EhTemka от Март 31, 2009, 19:12
Цитировать
- координаты меню нельзя устанавливать в методе createEditor()

Вообще-то для этого есть :
Код
C++ (Qt)
virtual void updateEditorGeometry ( QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const