Qt5.9.1结合REF开发基于chorm的浏览器(二)

将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.liblibcef.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初始化和退出函数

 1 bool CefInit()
 2 {
 3     CefEnableHighDPISupport();
 4
 5     CefSettings settings;
 6     settings.no_sandbox = true;
 7     settings.multi_threaded_message_loop = true;
 8
 9     HINSTANCE inc = GetModuleHandle(NULL);
10     CefMainArgs mainArgs(inc);
11
12     CefRefPtr<CefCommandLine> cmd_line = CefCommandLine::CreateCommandLine();
13     cmd_line->InitFromString(::GetCommandLineW());
14
15     CefRefPtr<CefApp> app;
16     app = new SimpleApp;
17     return CefInitialize(mainArgs, settings, app.get(), NULL);
18 }
1 void CefQuit()
2 {
3     CefShutdown();
4 }

在Qt的Gui类中添加初始化浏览器的方法

 1 void QBrowser::InitBrowser()
 2 {
 3     CefWindowInfo cefWndInfo;
 4     QString strUrl = "http://baidu.com";
 5     HWND wnd = (HWND)ui.fmBrowser->winId();
 6
 7     RECT winRect;
 8
 9     QDesktopWidget* pDeskTop = QApplication::desktop();
10     QRect qtRect = pDeskTop->screenGeometry();
11     winRect.left = qtRect.left();
12     winRect.top = qtRect.top();
13     winRect.right = qtRect.right();
14     winRect.bottom = qtRect.bottom();
15
16     cefWndInfo.SetAsChild(wnd, winRect);  //将cef界面嵌入qt界面中
17
18     CefBrowserSettings cefBrowSetting;
19     m_browserEvent = CefRefPtr<SimpleHandler>(new SimpleHandler(true));
20     bool browser = CefBrowserHost::CreateBrowser(cefWndInfo, m_browserEvent, strUrl.toStdString(), cefBrowSetting, NULL);
21
22     emit resize(qtRect.width(), qtRect.height());        //设置软件全屏
23 }

为了响应程序窗口大小变化,重载ResizeEvent方法

 1 void QBrowser::resizeEvent(QResizeEvent *event)
 2 {
 3     if (m_browserEvent.get() == NULL)
 4     {
 5         return;
 6     }
 7
 8     QRect qtRect = ui.fmBrowser->rect();
 9     const BrowserList browList = m_browserEvent->GetBrowserList();
10
11     if (!browList.empty())
12     {
13         HWND wnd = browList.front()->GetHost()->GetWindowHandle();
14         ::MoveWindow(wnd, qtRect.x(), qtRect.y(), qtRect.width(), qtRect.height(), true);
15     }
16 }

记得在构造Gui类的时候调用InitBrowser方法!

最后在Main函数中进行Cef的初始化和销毁函数

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    CefInit();

    QBrowser w;

    w.show();
    a.exec();

    CefQuit();

    return 0;
}

然后可以编译运行了

  运行后发现,有两个窗口,因为simpleApp中也有一个初始化函数OnContextInitialized,我们在这个初始化函数开始位置进行reture即可。

  万事开头难,有了这样一个小小的Demo之后我们就可以慢慢的分析cefsimple的实现,然后再将cef其他功能作用都添加到我们的项目中了。

时间: 2024-08-04 18:40:32

Qt5.9.1结合REF开发基于chorm的浏览器(二)的相关文章

Qt5.9.1结合REF开发基于chorm的浏览器(一)

下载cef3的源码 cef简介 嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件.CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去.它的设计思想政治就是易用且兼顾性能.CEF基本的框架包含C/C++程序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和Chromium&Webkit的操作细节.它在浏览器控件和宿主程序

用Visual C#开发基于OpenCV的Windows应用程序

http://blog.163.com/wangxh_jy/blog/static/28233883201001581640283/ 关于详细的配置及程序运行截图,请下载:http://download.csdn.net/source/1127474名为<用Visual C#开发基于OpenCV的Windows应用程序>的文章. 由于百度允许的字数太少了,所以就不贴全部程序了.有需要源程序的话,请下载:http://download.csdn.net/source/1127477 下面是主要的

开发基于CXF的 RESTful WebService web 项目 webservice发布

配置步骤 开发基于CXF的 RESTful WebService 1.创建Web项目并导入CXF的jar 2.在Web.xml中配置 CXFServlet <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-

Masstransit开发基于消息传递的分布式应用

使用Masstransit开发基于消息传递的分布式应用 Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用. 值得一提的是Masstransit的源码写的非常优秀,值得每个想提高自己编程能力的.Net选手阅读,整个代码看起来赏心悦目.反之,每次打开自己公司项目的时候心情都异常沉重.所以不是.Net不行,还是咱们水平不行. 学会了Masstransit你再也不用羡慕别人有Dubbo

使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度

上一篇博文使用PhoneGap开发基于Html5应用一:PhoneGap简介 中我介绍了如何从phonegap官网上下载源码并启动第一个应用,今天我们把phonegap的应用稍微改一下,让他实现几个比较牛叉的功能: 1.启动一个网页 2.启动摄像头 3.启动定位 老规矩,在实现这几个功能之前我们先讲一下原理性的东西: 首先我们先回顾一下上次说的,其实phonegap应用中有个特别的webview,它就是CDVViewController,关于这个类我们后面再详细描述,现在我们先了解这个类到底做了

用c++开发基于tcp协议的文件上传功能

用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学阅读,比 APUE 讲的更深入 这是某个银行广告项目(p2p传输视频)的一部分 IO模型采用的阻塞模式,文件一打开就直接上传 用vc 2003编译,生成win32 dll 麻雀虽小五脏俱全,CSimpleSocket,CReadStream dll 输出一虚类 extern "C" __d

使用Myeclipse 8.5开发基于JAX-WS的Web service实例

使用Myeclipse 8.5开发基于JAX-WS的Web service实例  本文为Web service 开发入门篇,主要介绍在Myeclipse 8.5环境下开发Web service的服务程序和客户端程序的基本流程.  在Weblogic 10.3.4 中部署Web service服务.   开发环境如下:  JAVA IDE: Myeclipse 8.5 开发Web service服务程序,需要了解以下相关内容, WSDL, SOAP, XML.这些是组成Web service 的基

[Tizen开发]基于Tizen平台的终端开发模拟器1 - Web

1.  官方 模拟器 Tutorials https://01.org/web-simulator/ 2. 最新版本发布于 2013.05 I am honored to introduce the Web Simulator for its public release on 01.org. The Web Simulator is a lightweight mobile application development and testing tool for web application

【DSP开发】利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程

[DSP开发]利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:前端是时间基于VS2010工程,在windows上实现了对openjpeg2000的改写,实现了从内存中读取数据进行解压缩的工作.由于某些技术储备需要,将其移植到DSP6455中进行解压缩.本文记录的就是整个移植过程. 0. 异想天开:试图在CCS上直接使用VS2010生成好的编译库 这个想法是一直就有的,在调试VS