1

私は Mac 開発に不慣れで、QMacCocoaViewContainer を使用して Cocoa WebView の使用を取り入れようとしています。複数のcssおよびjavascriptファイルを含むhtmlファイルをロードするビューがありますが、ユーザーがマウスをビュー上に移動したときにマウスホバーイベントがトリガーされないという問題があります。

ユーザーがマウスの左ボタンをクリックして押したままマウスを動かすと、イベントがトリガーされることがわかりました。これは焦点の問題であると推測していますが、この問題の解決には成功していません。どんな助けでも素晴らしいでしょう

4

2 に答える 2

1

SO で同様の質問を見つけました:ココア webview を QT アプリケーションに埋め込むときのイベントの問題で、答えがスケッチされています。その答えの解決策が機能することを確認できますが、ほのめかされているだけです。これが私がしたことです:

  1. アプリで QApplication::macEventFilter() を再実装します
  2. 次のようにして、アプリまたは QMacNativeCocoaWidget のみの Alien ウィジェットを無効にします。

    setAttribute(Qt::WA_PaintOnScreen)
    
  3. macEventFilter() で、イベントが MouseMove イベントかどうかを確認します。

    NSEvent *e = reinterpret_cast<NSEvent *>(event);
    if ([e type] == NSMouseMoved)
    
  4. その場合は、座標が WebView の境界内にあるかどうかを確認してから、MouseMoved 通知を通知センターに投稿します。

    [[NSNotificationCenter defaultCenter]
              postNotificationName:@"NSMouseMovedNotification" object:nil
              userInfo:[NSDictionary dictionaryWithObject:e forKey:@"NSEvent"]];
    

イベントの位置が WebView にあるかどうかを確認するときは、Cocoa 座標の原点が下にあるのに対し、Qt (0, 0) は左上にあることに注意してください。

于 2013-06-17T23:16:28.287 に答える
0

私の場合、NSPanel と組み込みの WebView を備えたネイティブ アプリケーションを使用していました。要素 (ボタン) がクリックされても、hover イベントは送信されませんでした。NSPanel クラスの次のメソッドをオーバーライドすることで問題を解決しました。

- (BOOL)canBecomeKeyWindow 
{

    return YES;
}

- (BOOL)isMainWindow 
{

    return YES;
}

- (BOOL)isKeyWindow 
{

    return ([NSApp isActive]) ? YES : [super isKeyWindow];
}   

キー ウィンドウ ステータスなしで NSPanel ファーストレスポンダーで NSView を作成する

于 2018-11-29T10:50:19.797 に答える