2013-04-12 61 views
1

我想要處理的這段代碼是以編程方式將焦點設置在QMenu項目上。但QMenu::setActiveAction()QMenu::popup()都不起作用。 我該怎麼做?如何以編程方式在QMenu上設置焦點項目

#include <QApplication> 
#include <QMainWindow> 
#include <QMenuBar> 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    QMainWindow *window = new QMainWindow(); 

    window->setWindowTitle(QString::fromUtf8("Test:QMenu")); 
    window->resize(336, 227); 

    QAction *newAct = new QAction("&New",window); 
    QAction *openAct = new QAction("&Open",window); 
    QAction *saveAct = new QAction("&Save",window); 

    QMenu *fileMenu; 

    fileMenu = window->menuBar()->addMenu("&File"); 
    fileMenu->addAction(newAct); 
    fileMenu->addAction(openAct); 
    fileMenu->addAction(saveAct); 

    window->show(); 

    fileMenu->popup(QPoint(10,10)); 

    return app.exec(); 
} 

回答

0

QMenu項目不像其他小部件一樣「聚焦」。事實上,他們不應該這樣做,因爲你想要的不是他們慣用的習慣。

作爲一種解決方法,在鼠標按下時,您可以獲得鼠標光標位置,在彈出菜單中預先計算默認菜單項的偏移量,並在該位置顯示菜單,其中鼠標光標位於默認菜單項下。建議此解決方案爲here

此外,什麼會更好用戶,選擇默認菜單項,你可以生成窄鍵按鈕事件後,你顯示彈出。這適用於Windows,但不確定其他操作系統。

+0

實際上,其中一個軟件要求是,只有鍵盤將被用作用戶輸入設備。在這方面,你的第一個暗示並沒有幫助。而你的第二個暗示對我來說並不清楚,如果你解釋此點 – Crain008

+0

嘗試按下鼠標右鍵以在瀏覽器中顯示彈出式菜單。出現菜單後,嘗試按下鍵盤上的窄鍵。您會看到,所選菜單項跳轉,因此您可以用語法生成按下事件來獲取所需的項目。 –

+0

這也適用於Mac。 –

相關問題