# QCef **Repository Path**: xiaoaimayun/QCef ## Basic Information - **Project Name**: QCef - **Description**: use Qcefview to test libcef without qt webengine - **Primary Language**: C++ - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2022-08-25 - **Last Updated**: 2022-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QCef #### #### Description use Qcefview to test libcef without qt webengine #### Software Architecture Software architecture description #### Installation 1. xxxx 2. xxxx #### Instructions 1. xxxx 2. xxxx 3. xxxx #### Contrast | | Advantage(优点) | Weakness(缺点) | Practical application(实际应用) | |------------|-------------------------------|-----------------------------|-----------------------------| | libcef | 功能齐全,跨平台 | 安装包大(80M\+),内容太多 | 对开发者技术要求高 | | QWebkit | 接口友好,易二次开发,跨平台 | 安装包大(40M\+),需要在Qt框架下 | 简单易用(Qt ver < Qt5.7) | | QWebengine | 接口友好,易二次开发,加载速度较QWebKit更快,跨平台 | 安装包大(60M\+),需要在Qt框架下 | 简单易用(Qt ver >= Qt5.7),Debug易崩 | | miniblink | 安装包体积小(早期版本不足20M) | 部分功能需要付费,字体渲染模糊和不支持多语言是很大缺陷 | 简单易用,用的不好易崩 | #### about libcef - CEF(Chromium Embedded Framework) > 嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。 > 它的设计思想就是易用且兼顾性能。CEF基本的框架包含C/C++程序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和Chromium&Webkit的操作细节。它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户插件,协议,javascript对象以及javascript扩展,宿主程序可以随意地控件资源下载,导航和打印等,并且可以跟Google Chrome浏览器一起,支持高性能和Html5 技术。 - CEF 缺省的运行方式是一主多辅进程式 - 调用CEF初始化的进程为主进程,该进程的主线程是UI线程,负责窗体的创建以及消息队列的维持,其余的几个线程则分别负责磁盘IO以及Javascript的回调等其它任务; - CEF初始化内部实现则会创建一个子进程,其中包含多个线程,负责网页的排版(Blink)和Javascript的执行等事情; - CEF 消息循环相关 - cef是多线程架构,每个线程都有自定的消息队列,若强制使用单线程(`settings.multi_threaded_message_loop = false;`)来运行cef,则需要主动去调用cef的消息循环,调用接口为`CefDoMessageLoopWork`,缺点是该函数调用频繁会很消耗CPU,如果调用频率低则会导致cef线程中处理任务不及时,cef界面反应速度变慢. - 如果使用多线程设置(`settings.multi_threaded_message_loop = true;`),则cef会为自己创建必要的线程(UI线程及IO线程等),此时在cef之外就无需主动调用cef的消息循环了. 此时需要注意的是cef中大多数对象触发的回调函数都是在cef自己的UI线程中,而不是我们程序创建的UI线程. 如果想使用cef的回调函数(例如`OnLoadEnd`)中操作自己的UI线程,则最好将操作转到自己的线程中去. - 为了保证cef消息循环的正常运行, 一般采用多线程模式的方式. #### Sample - [QCefView](https://gitee.com/Renleilei1992/QCef/tree/master/SampleInstance/QCefView) #### Refrence - [QCefView(A QWidget encapsulating the CEF on github)](https://github.com/tishion/QCefView) ##### Chinese Blog - [libCef基本框架与结构](https://blog.csdn.net/lg_20081224/article/details/79051702) - [从零开始手敲次世代游戏引擎(七十五)- 知乎文章](https://zhuanlan.zhihu.com/p/53281976) ##### English article #### Contribution 1. Fork the repository 2. Create Feat_xxx branch 3. Commit your code 4. Create Pull Request #### Gitee Feature 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md 2. Gitee blog [blog.gitee.com](https://blog.gitee.com) 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) 4. The most valuable open source project [GVP](https://gitee.com/gvp) 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)