最近在重构客户端,需要通过嵌入式页面来获取管理页面,通过比对多个库,最终选用了Qt+QCefView实现,其中遇到了挺多问题,这里进行一个简单的分享。
QCefView的嵌入式页面的按键响应功能(这里以F5刷新和F12打开DevTool),是在QCefViewBrowserHandler中通过继承CefKeyboardHandler,重写OnPreKeyEvent实现。
bool QCefViewBrowserHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
const CefKeyEvent& event,
CefEventHandle os_event,
bool* is_keyboard_shortcut)
{
QString qsParam = QString("windows_key_code: %1").arg(event.windows_key_code);
OutputDebugStringA(qsParams.toStdString().c_str());
if (KEYEVENT_RAWKEYDOWN == event.type)
{
if(VK_F5 == event.windows_key_code) // F5刷新页面
{
browser->Reload();
return true;
}
else if (VK_F12 == event.windows_key_code) // F12打开开发调试工具
{
CefWindowInfo windowInfo;
// 这里用Popup以DevTools作为标题打开弹窗,也可以用SetAsChild
windowInfo.SetAsPopup(NULL, "DevTools");
browser->GetHost()->ShowDevTools(windowInfo, this, CefBrowserSettings(), CefPoint());
}
}
return false;
}
这里只以最常用的F5和F12为例,有其他的按键需求可以仿照上述例子实现,此外若需要组合按键操作,可以结合使用Qt::Modifier实现