1

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」が失敗する可能性がある状況を誰か教えてもらえますか? 次に何を試せばよいかわかりません。ありがとう。

4

1 に答える 1

0

手遅れですが、私も同じ問題に直面し、カーボンAPIを使用して修正しましたCancelMenuTracking(),

CancelMenuTracking(
  MenuRef   inRootMenu,
  Boolean   inImmediate,
  UInt32    inDismissalReason)  

_NSGetCarbonMenuNSMenu の menuref を取得するために使用されます。

menuRef = _NSGetCarbonMenu(myMenu);

CancelMenuTracking(menuRef,YES,kHIMenuDismissedByCancelMenuTracking); 10.5 およびCancelMenuTracking(menuRef,YES,0); 10.6 以降の場合

于 2014-07-26T10:13:05.727 に答える