Russian Qt Forum
Ноябрь 01, 2024, 05:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMenu as delegate editor  (Прочитано 3042 раз)
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();
  ...
}
Записан
EhTemka
Гость
« Ответ #1 : Март 31, 2009, 19:12 »

Цитировать
- координаты меню нельзя устанавливать в методе createEditor()

Вообще-то для этого есть :
Код
C++ (Qt)
virtual void updateEditorGeometry ( QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 20.