2015-07-21 163 views
-1

我需要通过按Alt键(如在FireFox中)来隐藏/显示主菜单功能。我知道如何隐藏并显示它,但在显示后我无法突出显示菜单。我试过menuBar()->actions()[0].hover(),activateWindow(),setActiveAction(),activate(QAction::Hover),但没有什么帮助。我该怎么做?也许我应该使用WinApi函数而不是Qt?Qt如何突出显示菜单?

bool MainWindow::event(QEvent *event){ 
    if (event->type() == QEvent::KeyPress) 
    { 
     QKeyEvent *ke = static_cast<QKeyEvent*>(event); 
     if (ke->key() == Qt::Key_Alt) 
     { 
      keyReleaseEvent(ke); 
      return true; 
     } 
    } 
    return QMainWindow::event(event); 
} 

手柄Alt键

void MainWindow::keyReleaseEvent (QKeyEvent* event) 
{ 
    if (event->key() == Qt::Key_Alt){ 
     if (menuBar()->isHidden()){ 
      menuBar()->show(); 
      menuBar()->setFocus(Qt::MenuBarFocusEvent); //here I trying to highlight the menu 
     } 
     else{ 
      menuBar()->hide(); 
     { 
    } 
} 

回答

0

尝试调试一下,看看发生了什么。

你可以这样做:

if (menuBar()->hasFocus()) 
    qDebug() << " I have the focus"; 
else 
    qDebug() << " I don't have the focus"; 

,看看它是否有焦点,但工作不良或没有焦点,我认为这是问题...某处它失去它

一个小技巧,可以帮助您使用:

QTimer::singleShot(0, menuBar(), SLOT(setFocus())); 

MainWindow::keyReleaseEvent

而最后一件事......请注意,设置焦点需要一个focusPolicy,也许this可以帮助你。

+0

我已经试过这个。它有重点,但没有突出显示 – Dimanesson

+0

我编辑过它,忘记了focuspolicy,你有没有设置它? – Megasa3

+0

试过'QTimer :: singleShot(0,menuBar(),SLOT(setFocus()));',它没有帮助 – Dimanesson