qt软件开发中cef库的使用
qt软件中需要嵌入浏览器,用到qcefview,如何是使用的详细步骤。
使用QCEFView的详细步骤(含CEF处理)
使用QCEFView确实需要先准备好CEF库,但不需要你从源码完整编译CEF。以下是详细步骤说明:
一、是否需要下载和编译CEF?
需要下载CEF二进制包,但不需要从源码编译CEF:
- 必须下载CEF预编译的二进制包(包含已编译好的libcef等文件)
- 不需要自己用GN/ninja等工具从Chromium源码开始编译
- QCEFView在编译时会链接这些预编译好的CEF二进制文件
下载地址 https://cef-builds.spotifycdn.com/index.html
二、完整使用步骤
第1步:下载CEF二进制包
- 访问 CEF构建服务器
- 选择对应平台的标准发行版(如Windows选
cef_binary_xxx_windows64.tar.bz2)- 版本建议选择标注"stable"的
- 注意匹配你的系统架构(32位/64位)
- 解压到本地目录(例如
D:/cef_binary_120.0.6099.109_windows64)
第2步:获取QCEFView
git clone https://github.com/CefView/QCEFView.git
cd QCEFView
第3步:编译QCEFView
Windows示例(VS2019):
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX=../install -DCEF_ROOT=D:/cef_binary_120.0.6099.109_windows64
cmake --build . --config Release --target install
Linux示例:
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install -DCEF_ROOT=/path/to/cef_binary
make -j8
make install
第4步:在Qt项目中集成
- 在你的Qt项目.pro文件中添加:
# 添加QCEFView库路径
LIBS += -L$$PWD/../QCEFView/install/lib -lQCefView
# 添加包含路径
INCLUDEPATH += $$PWD/../QCEFView/install/include
DEPENDPATH += $$PWD/../QCEFView/install/include
# Windows需要额外链接库
win32 {
LIBS += -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
}
- 基本使用代码:
#include <QCefView.h>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 创建CEF视图
QCefView* cefView = new QCefView("https://www.qt.io", this);
setCentralWidget(cefView);
// 处理页面加载事件
connect(cefView, &QCefView::loadingStateChanged, [](bool isLoading) {
qDebug() << "Loading state:" << isLoading;
});
}
第5步:部署应用程序
需要随你的应用一起发布以下文件:
Windows必须包含:
your_app.exe
QCefView.dll
libcef.dll
chrome_elf.dll
icudtl.dat
snapshot_blob.bin
v8_context_snapshot.bin
/
|---locales/ (全部.locale文件)
|---resources/ (全部文件)
|---swiftshader/ (全部文件)
典型部署脚本示例(Windows):
xcopy /y /s "QCEFView\install\bin\QCefView.dll" "build\"
xcopy /y /s "cef_binary\Release\*.dll" "build\"
xcopy /y /s "cef_binary\Release\*.bin" "build\"
xcopy /y /s "cef_binary\Resources\*" "build\"
三、注意事项
CEF版本匹配:QCEFView的README通常会注明兼容的CEF版本范围
子进程处理:
- CEF默认需要子进程(如renderer进程)
- 确保发布时包含所有子进程可执行文件
- 可通过设置关闭沙箱模式(但不推荐生产环境使用):
CefSettings settings;
settings.no_sandbox = true;
DPI适配:
// 在main.cpp中尽早调用
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
调试技巧:
- 启用CEF日志:
QCefSetting settings;
settings.setLogSeverity(QCefSetting::LOGSEVERITY_VERBOSE);
- 远程调试:访问
chrome://inspect
- 启用CEF日志:
这样你就完成了QCEFView的集成,无需自己编译CEF,但必须正确获取和部署CEF二进制文件。
qt软件开发中cef库的使用的更多相关文章
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...
- 【大型软件开发】浅谈大型Qt软件开发(三)QtActive Server如何通过COM口传递自定义结构体?如何通过一个COM口来获得所有COM接口?
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义
Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...
- 软件开发中的完整测试所包括的环节UT、IT、ST、UAT
软件开发中的完成测试环境所包括的环节包括:UT.IT.ST.UAT UT = Unit Test 单元测试 IT = System Integration Test 集成测试ST = System T ...
- 关于软件开发中兼容win7注册表的解决方案
关于软件开发中兼容win7注册表的解决方案 编写人:CC阿爸 2014-3-14 l 近来在开发一winform程序时,发现在xp 系统访问注册表一切正常.可偏这个时候,微软又提醒大家.Xp今年 ...
- 软件开发中 SQL SERVER 任务的用法
在软件开发中,经常性会用到定时任务.这个时候你可能会想到线程.但是事实中,线程方法比较麻烦.容易出错,资源竞争等问题,设计起来让你很头痛. 现在给大家提供一个新的思路,用SQL SERVER 的任务管 ...
- Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向
Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向 1. 一个伟大的事业必然是过程导向为主 1 1.1. 过程的执行情况(有明确的执行手册及标准) ...
- UML在软件开发中各个阶段的作用和意义
经典的软件工程思想将软件开发分成5个阶段:需求分析,系统分析与设计,系统实现,测试及维护五个阶段. 之所以如此,是因为软件开发中饣含了物和人的因素,存在着很大的不确定性,这使得软件工程不可能像理想的, ...
随机推荐
- MySQL-全句锁、表锁和元数据锁
全局锁 全局锁是锁住整个数据库实例,只能读,任何关于更新操作的语句都会阻塞. 全局锁的适用场景 针对数据库做全库的逻辑备份操作时,需要使用全局锁. 全局锁的影响: 如果在主库上做全局锁操作,业务基本停 ...
- 【Maven】POM基本概念
目前的技术在开发中存在的问题: 一个项目就是一个工程 如果项目非常庞大,就不适合继续使用 package 来划分模块.最好是每一个模块对应一个工程,利于分工协作. 借助于 Maven 就可以将一个项目 ...
- 学习Django【1】模型
编辑 models.py 文件,改变模型. 运行 python manage.py makemigrations 为模型的改变生成迁移文件. 运行 python manage.py migrate 来 ...
- 青岛oj集训5
Floyd算法--全源最短路 cerr:标准输出错误流:不会输出到freopen制定的out文件中,而是会输出到错误文件中. 提交上去无论加不加freopen,哪怕是提交到洛谷,也只是比较out文件中 ...
- DataPermissionInterceptor源码解读
本文首发在我的博客:https://blog.liuzijian.com/post/mybatis-plus-source-data-permission-interceptor.html 一.概述 ...
- DevOps与:cloud,IaC,Container,Microservices, Serverless
本文我们来理一理当下最火的技术与DevOps的关系,2020年可以考虑从如下的几方面来改进DevOps. DevOps代表开发和运营.它的目标是将开发.质量保证和运营(部署和集成)合并到一个单一的.连 ...
- Unity3d中协程的原理,你要的yield return new xxx的真正理解之道
- Sql查询(Select)语句实例
span { color: rgba(255, 0, 0, 1) } Select 结构: 句子结构: Select 列名 [all/distinct] from 表名 where 条件 group ...
- Python科学计算系列5—导数
1.一元函数的导数 例1:求下列函数的导数 例2:求下列函数的50阶导数 代码如下: from sympy import * x = symbols('x') f1 = diff(tan(x)) f2 ...
- live555开发笔记(二):live555创建RTSP服务器源码剖析,创建rtsp服务器的基本流程总结
前言 基于Live555的流媒体服务器方案源码剖析,了解基本的代码搭建步骤. Demo 关于.h264与.265 没深入研究,但是h264的后缀名.264替换为.h264文件, ...