LINUX.ORG.RU

Qt не ловит клавиши F3 и F5 в QKeySequence внутри приложения (а F7 и F9 ловит)

 ,


0

1

Не могу понять, по каким критериям Qt может/не может работать с некоторыми горячими клавишами внутри окна приложения. Картина такая:

Не работают клавиши:

QKeySequence("F3")
QKeySequence("F5")

И работают клавиши:
QKeySequence("F7")
QKeySequence("F9")


Среда LXDE с OpenBox.

В настройках Lxhotkeys ни одна из этих клавиш не забиндина.

В настроечном файле /home/USER/.config/openbox/lxde-rc.xml этих клавиш тоже нет (только комбинации с Alt/Ctrl).

Вопрос: почему работа с клавишами F3 и F5 невозможна в окне приложения?

★★★★★

«железо» какое? xev F3|F5 ловит? в «меню окна» на них ничего не повешено? в других программах эти клавиши работают?

anymouze ★★
()
Ответ на: комментарий от anymouze

Железо самое обычное, десктоп, Core2Duo. Клавиатура классика 101 клавиша A4Tech KR-85, USB-шная.

Программа xev клавиши ловит:

KeyPress event, serial 48, synthetic NO, window 0x6200001,
    root 0x28e, subw 0x0, time 179392275, (1269,420), root:(1270,442),
    state 0x0, keycode 69 (keysym 0xffc0, F3), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x6200001,
    root 0x28e, subw 0x0, time 179392339, (1269,420), root:(1270,442),
    state 0x0, keycode 69 (keysym 0xffc0, F3), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

...
    
KeyPress event, serial 48, synthetic NO, window 0x6200001,
    root 0x28e, subw 0x0, time 179419058, (1130,256), root:(1131,278),
    state 0x0, keycode 71 (keysym 0xffc2, F5), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x6200001,
    root 0x28e, subw 0x0, time 179419122, (1130,256), root:(1131,278),
    state 0x0, keycode 71 (keysym 0xffc2, F5), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False


В меню окна на них ничего не навешано.

В других программах эти клавиши работают.

Xintrea ★★★★★
() автор топика

Повесь на главное окно eventFilter и смотри, есть ли событие Key_Down (или как там оно называлось, я не помню). Если есть, то проверяй, как устанавливаешь

XMs ★★★★★
()
Ответ на: комментарий от XMs

У меня висит такой фильтр:

bool MainWindow::eventFilter( QObject *o, QEvent * e )
{
  // Отлавливание потери фокуса
  if(o==this && e->type() == QEvent::WindowDeactivate)
  {
    qDebug() << "Main window focus deactivate, save all state.";
    saveAllState();
  }

  return QMainWindow::eventFilter(o, e);
} 

// Обработчик отлавливает нажатия клавиш
void MainWindow::keyPressEvent(QKeyEvent *event)
{
  // Проброс нажатия клавиши Ctrl в редактор, даже если он не активный (не в фокусе)
  if( event->key() == Qt::Key_Control )
    if(editorScreen!=NULL)
      emit globalPressKey(Qt::Key_Control);

  qDebug() << "Event MainWindow: " << event->key();

  QMainWindow::keyPressEvent(event);
}


Интересно вот что. У меня в одном и том же месте программы одинаковым кодом навешаны обработчики клавиш F3, F5, F7, F9 (то есть QAction задается горячая клавиша).

Если нажимать F3/F5, то в консоли видим:
13:45:56 [DBG] Event MainWindow:  16777268
13:45:57 [DBG] Event MainWindow:  16777267

То есть, как минимум в Qt-приложение нажатие клавиш F3/F5 прилетают. И проблему надо искать в самом приложении.

А если нажимать F7/F9, то MainWindow::keyPressEvent() не срабатывает, в консоли ничего нет, но само действие выполняется.

Я уж думал, что проблема с F3/F5 в QAction, но нет, эта же QAction нормально срабатывает при вызове из меню. То есть, QAction есть, оно рабочее, к нему привязана клавиша. И клавиша не работает.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Если ты в eventFilter добавишь вывод всех KeyPress-событий до return QMainWindow::keyPressEvent(event);, то, скорее всего, убедишься, что всё ловится, даже F7/F9. Тот факт, что

Если нажимать F3/F5, то в консоли видим:

13:45:56 [DBG] Event MainWindow:  16777268
13:45:57 [DBG] Event MainWindow:  16777267

говорит о том, что у тебя эти клавиши не уходят как шоткаты. Покажи, как настраиваешь QAction (как рабочие, так и нерабочие)

XMs ★★★★★
()
Ответ на: комментарий от XMs

Все, разобрался. Я затупил конкретно.

У меня часть QAction была положена на тулбар, а часть на контекстное меню. Так вот те которые лежали на контекстном меню, и не срабатывали по горячим клавишам.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.