qt的弹出式菜单

来源:互联网 发布:财付通软件下载 编辑:程序博客网 时间:2024/04/28 02:03
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 );
原创粉丝点击