天天看點

qt的彈出式菜單

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 );