Russian Qt Forum

Qt => Model-View (MV) => Тема начата: __Heaven__ от Январь 30, 2018, 09:43



Название: [РЕШЕНО] Context menu + shortcuts в QTreeView
Отправлено: __Heaven__ от Январь 30, 2018, 09:43
Привет, друзья!
Прошу помочь понять, как можно заставить QTreeView наследника, заключённого в док отвечать на горячие клавиши, привзанные к нему.
У меня набор действий над вьюхой такой:
Переименовать F2, удалить del, вызвать диалог правки Enter
Я пробовал создавать меню и вызывать его из contextMenuEvent, а шорткат Enter обрабатывал в keyPressEvent (остальные уже обрабатываются вьюхой). Но такое дело. При завершении переименования элемента вьюхи по Enter я получаю keyPressEvent....

Пробовал добавлять экшены в виджет вьюхи с Qt::ActionsContextMenu. Но шорткаты не работают....

Как быть?


Название: Re: Context menu + shortcuts в QTreeView
Отправлено: kai666_73 от Январь 30, 2018, 10:54
Два варианта:
1. добавить по QToolButton-у (с установленными шорткатами) на каждое действие в док
2. перекрыть keyPressEvent поаккуратней, например:
Код
C++ (Qt)
void TestTreeView::keyPressEvent(QKeyEvent *event)
{
   switch (event->key()) {
   case Qt::Key_Enter:
   case Qt::Key_Return:
       if ( !(state() & QTreeView::EditingState) )
           QMessageBox::information(nullptr, "Edit here", "Edit here"); // <<<< Edit DIalog
       break;
   case Qt::Key_F2:
       auto ind = selectionModel()->currentIndex();
       if (ind.isValid()) {
           edit(ind);
       }
       break;
   }
}
 


Название: Re: Context menu + shortcuts в QTreeView
Отправлено: __Heaven__ от Январь 30, 2018, 20:09
Спасибо. Воспользовался вариантом 2. Помогло. Только != EditingState будет корректнее.
Не знал об этом свойстве. Гугл предлагал в делегате руками фиксировать состояние редактирования...