我有一个 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”可能会失败?我不确定下一步该尝试什么。谢谢。