显示在一个弹出式窗口中的菜单。
这种菜单的典型用法是用作上下文菜单,它支持子菜单。不要将它与WMenu混淆,那个东西实现的是一个永远可见的导航菜单。
在一开始创建时,菜单本身不可见,直到调用popup()或exec()。然后,菜单会保持可见,直到用户选择咯一个菜单项或者取消菜单(按Escape 或点击其它位置)。
这个类假设JavaScript 是可用的,以便将菜单放置在鼠标的当前位置,并且为当前选中的菜单项提供反馈。
类似于WDialog,有两种使用菜单的方式。最简单的方式就是使用其中的一个exec()方法,这样就会启动一个新的事件循环并且等待,直到用户取消这个弹出菜单(按Escape 或点击其它位置)或者选择一个菜单项。
或者,妳可以使用其中的一个popup()方法来显示出菜单,然后监听aboutToHide信号,到时再读取结果(result())。
妳有多种选择来对一个条目的选中情况进行反应:
•.妳可以使用WPopupMenuItem本身来识别该动作项,可以通过特例化来实现,或者使用WPopupMenuItem::setData()来绑定自定义的数据。
•.妳可以向每个选择项的WPopupMenuItem::triggered信号绑定一个单独的方法。
•.妳可以使用一个WSignalMapper来将额外的数据绑定到一个条目的WPopupMenuItem::triggered信号,然后在一个信号槽里处理这些信号。
使用示例:
//创建一个菜单,带有一些菜单项
popup.addItem("icons/item1.gif", "Item 1");
popup.addItem("Item 2")->setCheckable(true);
popup.addItem("Item 3");
popup.addSeparator();
popup.addItem("Item 4");
popup.addSeparator();
popup.addItem("Item 5");
popup.addItem("Item 6");
popup.addSeparator();
WPopupMenu *subMenu = new WPopupMenu();
subMenu->addItem("Sub Item 1");
subMenu->addItem("Sub Item 2");
popup.addMenu("Item 7", subMenu);
WPopupMenuItem *item = popup.exec(event);
if (item) {
// ... 进行相关的操作。
}
WPopupMenu 具有Wt-popupmenu 样式类。它的外观可使用以下样式类选择器来覆盖:
.Wt-popupmenu .Wt-item, .Wt-popupmenu .Wt-selected : 菜单项
.Wt-popupmenu .Wt-selected : 选中的菜单项
.Wt-popupmenu .Wt-separator : 分隔符
WPopupMenu的屏幕截图:
WPopupMenu示例(默认外观)
WPopupMenu示例(漂亮外观)
参考:
WPopupMenuItem * Wt::WPopupMenu::exec |
( |
const WPoint & |
point |
) |
在指定位置执行此弹出菜单。
使用popup()来在文档坐标point处显示此弹出菜单,然后等待,直到用户选择咯某个菜单项,或者整个菜单被取消。
返回被选择的菜单(或子菜单)项,或者,如果用户取消咯菜单的话则返回0.
参考:
HxLauncher: Launch Android applications by voice commands