我是 Mac 开发的新手,正在尝试使用 QMacCocoaViewContainer 结合使用 Cocoa WebView。我有使用多个 css 和 javascript 文件加载我的 html 文件的视图,但我遇到的问题是当用户将鼠标移到视图上时不会触发鼠标悬停事件。
我已经确定,如果用户单击并按住鼠标左键并移动鼠标,则会触发事件。我猜这是一个焦点问题,但没有成功解决这个问题。任何帮助都会很棒
我在 SO: Event issue when embed cocoa webview to QT application上发现了一个类似的问题,它有一个草图的答案。我可以确认该答案中的解决方案有效,但只是暗示。这是我所做的:
通过执行禁用您的应用程序或仅 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) 位于左上角!
就我而言,我使用的是带有 NSPanel 和嵌入式 WebView 的本机应用程序。即使单击元素(按钮),也不会发送悬停事件。我通过覆盖 NSPanel 类的以下方法解决了这个问题:
- (BOOL)canBecomeKeyWindow
{
return YES;
}
- (BOOL)isMainWindow
{
return YES;
}
- (BOOL)isKeyWindow
{
return ([NSApp isActive]) ? YES : [super isKeyWindow];
}