我有一个QT应用程序,我在OSX上使用本机菜单。我有自定义绘制的菜单项,我通过将我自己的NSView派生类附加到我想要特别绘制的NSMenuItems来创建。这一切都很好;菜单项向右绘制并正确激活菜单功能。但是,激活菜单功能后,菜单不会消失 - 它仍然跟踪鼠标移动。 (光标仍然突出显示项目)我花了几天时间搜索答案,我没有在其他地方看到过类似的问题。我的NSView类很简单;我已经覆盖了绘制的“rect”类,我的mouseUp事件就在这里:
-(void)mouseUp:(NSEvent *)theEvent
{
NSMenuItem* item = [self enclosingMenuItem];
if ( item != nil ){
NSMenu *menu = [item menu];
if ( menu != nil ){
[menu cancelTracking];
[NSApp sendAction:[item action] to:[item target] from:item];
}
}
}
我也尝试过使用“cancelTrackingWithoutAnimation”,我尝试在父菜单栏上调用cancelTracking。谁能告诉我在什么情况下“cancelTracking”可能会失败?我不确定下一步该尝试什么。感谢。
答案 0 :(得分:0)
为时已晚,但我也面临同样的问题,并使用碳API CancelMenuTracking(),
CancelMenuTracking(
MenuRef inRootMenu,
Boolean inImmediate,
UInt32 inDismissalReason)
使用_NSGetCarbonMenu
获取NSMenu的menuref。
menuRef = _NSGetCarbonMenu(myMenu);
CancelMenuTracking(menuRef,YES,kHIMenuDismissedByCancelMenuTracking)
;对于10.5和CancelMenuTracking(menuRef,YES,0)
; 10.6及以上