macos - os X 上的 Cocoa WebView 无需单击并按住鼠标左键即可触发鼠标悬停事件

标签 macos cocoa webview focus mousemove

我是 Mac 开发新手,正在尝试使用 QMacCocoaViewContainer 来合并 Cocoa WebView 的使用。我的 View 使用多个 css 和 javascript 文件加载 html 文件,但我遇到的问题是,当用户将鼠标移到 View 上时,不会触发鼠标悬停事件。

我已经确定,如果用户单击并按住鼠标左键并移动鼠标,则会触发事件。我猜测这是一个焦点问题,但尚未成功解决此问题。任何帮助都会很棒

最佳答案

我在SO上发现了类似的问题:Event issue when embed cocoa webview to QT application其中已经勾勒出答案。我可以确认该答案中的解决方案有效,但只是暗示。这是我所做的:

  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) 则位于左上角!

关于macos - os X 上的 Cocoa WebView 无需单击并按住鼠标左键即可触发鼠标悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16191279/

相关文章:

Cocoa:NSViewController View 中的 setter

objective-c - 无法从 NSPopUpButton 中删除项目

swift - 如何使用 Swift 将带有 pdf 的 webview 页面加载到 ibooks 中

objective-c - cocoa 网页 View : searchFor:direction:caseSensitive:

macos - 如何将文件从 docker 虚拟机复制到 OS X 上的主机?

eclipse - 我应该在 OSX 上运行哪个版本的 Eclipse? 32位还是64位?

macos - 以编程方式禁用摇动查找

python - 在 Python (Mac) 中使用 OpenCV 裁剪视频

objective-c - 选定的菜单项颜色未对齐?

android - iframe 视频不会在 Android WebView 中进入全屏模式