2012-12-03 5 views
1

QT 앱이 있고 OSX에서 기본 메뉴를 사용하고 있습니다. 나만의 NSView 파생 클래스를 특별히 그려야하는 NSMenuItems에 연결하여 만든 사용자 지정 그리기 메뉴 항목이 있습니다. 이 모든 것이 잘 작동합니다. 메뉴 항목이 올바르게 그려지고 메뉴 기능이 올바르게 활성화됩니다. 그러나 메뉴 기능을 활성화 한 후에도 메뉴는 사라지지 않으며 마우스 움직임을 추적합니다. (커서는 여전히 항목을 강조 표시합니다.) 나는 답을 찾기 위해 며칠을 보냈고, 다른 곳에서는 비슷한 문제를 보지 못했습니다. NSView 클래스는 간단합니다. 나는 그림은 "RECT"클래스를 오버라이드 (override) 한, 내 mouseUp 이벤트는 여기에 있습니다 :NSMenu cancelTracking이 추적을 취소하지 않는 경우가 있음

-(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

너무 늦기 그러나 나는 또한 같은 문제에 직면하고 NSMenu의 menuref를 얻을 수 _NSGetCarbonMenu을 사용 탄소 API CancelMenuTracking(),

CancelMenuTracking(
    MenuRef inRootMenu, 
    Boolean inImmediate, 
    UInt32 inDismissalReason) 

를 사용하여 고정.

menuRef = _NSGetCarbonMenu(myMenu); 

CancelMenuTracking(menuRef,YES,kHIMenuDismissedByCancelMenuTracking); 10.5 및 CancelMenuTracking(menuRef,YES,0)에 대해; 10.6 이상