博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt5.9.1结合REF开发基于chorm的浏览器(二)
阅读量:4354 次
发布时间:2019-06-07

本文共 2811 字,大约阅读时间需要 9 分钟。

将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
cmd_line = CefCommandLine::CreateCommandLine();13 cmd_line->InitFromString(::GetCommandLineW());14 15 CefRefPtr
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
(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其他功能作用都添加到我们的项目中了。

转载于:https://www.cnblogs.com/srluv/p/7400958.html

你可能感兴趣的文章
删除无限循环的文件夹-删除递归文件夹
查看>>
Flash报表控件(FusionCharts) 使用
查看>>
本周总结
查看>>
使用C#和Java发送邮件(转载)
查看>>
Hadoop中eclipse 插件的编译 笔记四
查看>>
MariaDB备份之XtraBackup
查看>>
Activity间用Intent和Bundle传递参数
查看>>
记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
查看>>
HDU4624 Endless Spin(概率&&dp)
查看>>
js-新闻无缝滚动
查看>>
Python在自动化运维时最常用的50个方法(转)
查看>>
Java 学习之路 之 泛型方法
查看>>
Test
查看>>
C# 整理
查看>>
AngularJS中使用$resource
查看>>
[poj3261]Milk Patterns(后缀数组)
查看>>
[luogu3369]普通平衡树(fhq-treap模板)
查看>>
题解 P2799 【国王的魔镜】
查看>>
写写代码,注意注意细节
查看>>
css Backgroud-clip (文字颜色渐变)
查看>>