我是 Mac 开发新手,正在尝试使用 QMacCocoaViewContainer 来合并 Cocoa WebView 的使用。我的 View 使用多个 css 和 javascript 文件加载 html 文件,但我遇到的问题是,当用户将鼠标移到 View 上时,不会触发鼠标悬停事件。
我已经确定,如果用户单击并按住鼠标左键并移动鼠标,则会触发事件。我猜测这是一个焦点问题,但尚未成功解决此问题。任何帮助都会很棒
最佳答案
我在SO上发现了类似的问题:Event issue when embed cocoa webview to QT application其中已经勾勒出答案。我可以确认该答案中的解决方案有效,但只是暗示。这是我所做的:
- 在您的应用中重新实现 QApplication::macEventFilter()
通过执行以下操作禁用您的应用程序或仅 QMacNativeCocoaWidget 的 Alien 小部件
setAttribute(Qt::WA_PaintOnScreen)
在 macEventFilter() 中,检查事件是否为 MouseMove 事件:
NSEvent *e = reinterpret_cast<NSEvent *>(event); if ([e type] == NSMouseMoved)
如果是这样,请检查坐标是否在您拥有的 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/