2015-01-13 2 views
1

У меня есть рабочее приложение. Я добавил menuBar() в главное окно с некоторыми меню. Затем я спрятал его, чтобы освободить пространство экрана. Я написал код ниже, так что, когда пользователь нажимает клавишу ALT, панель меню появляется, если она скрыта, и она скрывается, если она отображается.Как сфокусировать menuBar() с Qt

void MainWindow::keyPressEvent(QKeyEvent *k) { 
    if(k->modifiers() & Qt::AltModifier) { 
     menuBar()->setHidden(!menuBar()->isHidden()); 
     if(menuBar()->hasFocus()) { 
      QMessageBox::information(this, "Info", "Focus !"); 
     } 
    } 
} 

Как вы можете видеть, я также добавил QMessageBox, чтобы увидеть, когда Menubar имеет фокус. И это поле появляется только в половине случаев. Это выглядит следующим образом:

  1. приложения, запущенные, Menubar скрытого
  2. Я нажмите ALT, отображается строка меню, не окно сообщения, не фокус
  3. жмет ALT, Menubar скрытого
  4. I нажмите ALT, отображается строка меню , окно сообщения, фокус
  5. жму ALT, Menubar скрытого
  6. Я нажмите ALT, строка меню отображается, не окно сообщения, не фокус
  7. жмет ALT, Menubar скрытого
  8. I нажмите ALT, Menubar отображается, окно сообщения, фокус
  9. т.д.

Как убедиться, что при отображении Menubar, он всегда имеет фокус?

ответ

0

Вы пробовали просто добавить команду setFocus?

void MainWindow::keyPressEvent(QKeyEvent *k) { 
    if(k->modifiers() & Qt::AltModifier) { 
     menuBar()->setHidden(!menuBar()->isHidden()); 
     menuBar()->setFocus(Qt::MenuBarFocusReason); 
     if(menuBar()->hasFocus()) { 
      QMessageBox::information(this, "Info", "Focus !"); 
     } 
    } 
} 
+0

Да, я уже пробовал это. Я просто попробовал еще раз, и теперь у меня есть окно сообщений каждый раз, когда отображается меню, но в меню «Файл» нет подсветки (это выделение показывает, что основное внимание уделяется строке меню). Из того, что я вижу, основное внимание уделяется меню в течение одного небольшого момента и идет куда-то еще. Что может быть причиной этого? –

Смежные вопросы