Qt中的彈出式菜單用類 QPopupMenu表示,每一個菜單需要編寫代碼逐個加入。
下面構造一個file彈出式 菜單:
QPopupMenu* file = new QPopupMenu;
file->insertItem( "&Open", this, SLOT( openFile() ) );
file->insertItem( "&Save", this, SLOT( saveFile() ) );
file->insertSeparator();
file->insertItem( "&Quit", this, SLOT( exitMain() ) );
第一句構造出一個彈出式菜單的執行個體,後面使用insertItem分别添加四條菜單項目。insertItem有多種使用形式,上面是最常用的也是最簡單的一種。第一個參數表示菜單文本,第二個和第三個參數表示接受菜單事件的類和slot。需要注意的是insertItem()方法的第2,3個參數,這實際上是調用了connect()方法把菜單被選擇這個事件和某個類的Slot()方法連接配接起來,這是很典型的用法。
與菜單條對應的是QMenuBar類,QMenuBar也有insertItem方法,不同的是,他使用指向QPopupMenu類的指針作為第二個參數:
QMenuBar* menu;
menu = new QMenuBar( this );
menu->insertItem( "&File", file );
最後是編寫openFile(),saveFile()和 exitMain()三個slot,現在可以隻編寫三個空函數,以後再加上實際功能。
快捷鍵
Qt中控制快捷鍵的類是QAccel.但是大多數情況下并不需要直接使用它,而是采用另外一種形式的insertItem方法。Qt中的許多類在生成執行個體的時候會自動産生快捷鍵,例如PushButton和QGroupBox.
file->insertItem( "&Open", this, SLOT( openFile() ), CTRL+KEY_O );
file->isnertItem( "&Save", this, SLOT( saveFile() ), CTRL+KEY_S );
給菜單添加快捷鍵隻需要在insertItem函數中加上第四個參數表示。
控制菜單項
有時候需要對菜單項作一些控制,例如讓它變灰而禁用,或者使用checkmark。兩者分别使用setItemEnbled()和setItemChecked()方法,原型如下:
void QMenuData::setItemChecked( int id, bool check );
void QMenuData::setItemEnabled( int id, bool enable );
第一個參數id是insertItem()方法的傳回值:
int id_save = file->insertItem( "&Save", this, SLOT( saveFile() ) );
file->setItemEnable( id_save, FALSE );