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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Context menu + shortcuts в QTreeView  (Прочитано 2973 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Январь 30, 2018, 09:43 »

Привет, друзья!
Прошу помочь понять, как можно заставить QTreeView наследника, заключённого в док отвечать на горячие клавиши, привзанные к нему.
У меня набор действий над вьюхой такой:
Переименовать F2, удалить del, вызвать диалог правки Enter
Я пробовал создавать меню и вызывать его из contextMenuEvent, а шорткат Enter обрабатывал в keyPressEvent (остальные уже обрабатываются вьюхой). Но такое дело. При завершении переименования элемента вьюхи по Enter я получаю keyPressEvent....

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

Как быть?
« Последнее редактирование: Январь 31, 2018, 10:49 от __Heaven__ » Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #1 : Январь 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;
   }
}
 
« Последнее редактирование: Январь 30, 2018, 12:00 от kai666_73 » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Январь 30, 2018, 20:09 »

Спасибо. Воспользовался вариантом 2. Помогло. Только != EditingState будет корректнее.
Не знал об этом свойстве. Гугл предлагал в делегате руками фиксировать состояние редактирования...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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