Qt5.9.1结合REF开发基于chorm的浏览器(二)
2017-08-20 18:41
941 查看
将libcef_dll_wrapper编译方式设置为MD
因为使用的Qt是动态链接的,而cef模式使用的是静态链接的方式,所以在使用前需要将cef编译方式改成Multi-thread DLL(/MD),修改路径在在C/C++->Code Generation下的Runtime Library。重新编译后的libcef_dll_wrapper.lib库大概26Mb新建QtGUI项目
为了快速实现,我们将使用cefsimple中的源码,将其嫁接到QtGUI中。首先把cef目录下的include拷贝到新项目中,再将libcef_dll_wrapper.lib和libcef.dll拷贝到新项目的lib目录下。然后在项目中配置include和lib目录并将两个静态库添加到Linker->Input下。再将cefsimple中的simple_app.h、simple_app.cc、simple_handler.h、simple_handler.cc、simple_handler_win.cc拷贝到我们自己的项目源码目录下并在项目中添加。
新建.h和.cpp文件添加Cef初始化和退出函数
bool CefInit() { CefEnableHighDPISupport(); CefSettings settings; settings.no_sandbox = true; settings.multi_threaded_message_loop = true; HINSTANCE inc = GetModuleHandle(NULL); CefMainArgs mainArgs(inc); CefRefPtr<CefCommandLine> cmd_line = CefCommandLine::CreateCommandLine(); cmd_line->InitFromString(::GetCommandLineW()); CefRefPtr<CefApp> app; app = new SimpleApp; return CefInitialize(mainArgs, settings, app.get(), NULL); }
void CefQuit() { CefShutdown(); }
在Qt的Gui类中添加初始化浏览器的方法
void QBrowser::InitBrowser() { CefWindowInfo cefWndInfo; QString strUrl = "http://baidu.com"; HWND wnd = (HWND)ui.fmBrowser->winId(); RECT winRect; QDesktopWidget* pDeskTop = QApplication::desktop(); QRect qtRect = pDeskTop->screenGeometry(); winRect.left = qtRect.left(); winRect.top = qtRect.top(); winRect.right = qtRect.right(); winRect.bottom = qtRect.bottom(); cefWndInfo.SetAsChild(wnd, winRect); //将cef界面嵌入qt界面中 CefBrowserSettings cefBrowSetting; m_browserEvent = CefRefPtr<SimpleHandler>(new SimpleHandler(true)); bool browser = CefBrowserHost::CreateBrowser(cefWndInfo, m_browserEvent, strUrl.toStdString(), cefBrowSetting, NULL); emit resize(qtRect.width(), qtRect.height()); //设置软件全屏 }
为了响应程序窗口大小变化,重载ResizeEvent方法
void QBrowser::resizeEvent(QResizeEvent *event) { if (m_browserEvent.get() == NULL) { return; } QRect qtRect = ui.fmBrowser->rect(); const BrowserList browList = m_browserEvent->GetBrowserList(); if (!browList.empty()) { HWND wnd = browList.front()->GetHost()->GetWindowHandle(); ::MoveWindow(wnd, qtRect.x(), qtRect.y(), qtRect.width(), qtRect.height(), true); } }
记得在构造Gui类的时候调用InitBrowser方法!
最后在Main函数中进行Cef的初始化和销毁函数
int main(int argc, char *argv[]) { QApplication a(argc, argv); CefInit(); QBrowser w; w.show(); a.exec(); CefQuit(); return 0; }
然后可以编译运行了
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/04/23bc1bb1ecb5737874d6289a773e213c.png)
运行后发现,有两个窗口,因为simpleApp中也有一个初始化函数OnContextInitialized,我们在这个初始化函数开始位置进行reture即可。
万事开头难,有了这样一个小小的Demo之后我们就可以慢慢的分析cefsimple的实现,然后再将cef其他功能作用都添加到我们的项目中了。
相关文章推荐
- Qt5.9.1结合REF开发基于chorm的浏览器(一)
- Qt5.9.1结合REF开发基于chorm的浏览器(一)
- Qt5.9.1结合REF开发基于chorm的浏览器(二)
- Qt5.9.1结合REF开发基于chorm的浏览器(一)
- 基于Qt进行移动浏览器开发
- 【Qt编程】基于Qt的词典开发系列--后序
- 基于内嵌浏览器内核(如XULRunner、CEF)来开发桌面软件
- 基于.net开发chrome核心浏览器【六】
- 【Qt编程】基于Qt的词典开发系列<十四>自动补全功能
- 【Qt编程】基于Qt的词典开发系列<十二>调用讲述人
- 我的嵌入式Qt开发第一课——基于BBB和hmc5843三轴电子罗盘
- 分享基于Qt5开发的一款故障波形模拟软件
- 基于.net开发chrome核心浏览器【七】
- 基于Chrome,foxfire(WeiKit内核)浏览器的密码安全控件插件开发(NPAPI)
- PyQt中如何结合Qt设计师进行开发
- Qt:基于Qt开发的开源小工具包:JQTools
- 用Qt开发简单的浏览器(一)
- YY语音从4.0版本开始是基于Qt的开发过程,以及碰到的问题
- 【Qt编程】基于Qt的词典开发系列<十四>自动补全功能