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个阶段:需求分析,系统分析与设计,系统实现,测试及维护五个阶段. 之所以如此,是因为软件开发中饣含了物和人的因素,存在着很大的不确定性,这使得软件工程不可能像理想的, ...
随机推荐
- 【踩坑系列】使用httpclient调用第三方接口返回javax.net.ssl.SSLHandshakeException异常
1. 踩坑经历 最近做了个需求,需要调用第三方接口获取数据,在联调时一直失败,代码抛出javax.net.ssl.SSLHandshakeException异常, 具体错误信息如下所示: javax. ...
- Oracle - ORA-19809: 超出了恢复文件数的限制
场景重现 使用rman执行以下命令进行数据库备份的时候出现异常: RMAN> backup database; 出现如下错误: # 主要异常信息如下: # ... RMAN-00571: === ...
- CSS布局——左右固定中间填满
小小例子,注意中间的div应该写在最后,留爪. 先上个高清无码图 源码实现 <!DOCTYPE html> <html lang="en" xmlns=" ...
- awesome llm web ui
https://github.com/JShollaj/awesome-llm-web-ui Contents Streamlit Gradio Lobe Chat Text Generation W ...
- HTB打靶记录-TheFrizz
信息收集 nmap -sV -sC -O 10.10.11.60 Nmap scan report for 10.10.11.60 Host is up (0.63s latency). Not sh ...
- 🎀FreeMarker 禁止自动转义标签-noautoesc
简介 FreeMarker 是一个用 Java 语言编写的模板引擎,它被设计用来生成文本输出(HTML 网页.电子邮件.配置文件等).在 FreeMarker 中,默认情况下,当你在模板中输出变量时, ...
- python-pandas提取网页内tables(表格类型)数据
比如,下面网页里大学排行的数据 分析这个页面,表格内的数据是包裹在tables里的 这样就可以使用pandas对数据进行提取并且导出成csv文件,具体代码很简单 import pandas as pd ...
- jdk源码目录说明
- P4516 [JSOI2018] 潜入行动 题解
题意: 给定一棵无根树,要求给树上 \(k\) 个点标记,使得所有点都至少与一个被标记的点相邻.(注意自己被标记不代表与标记相邻) 思路 考虑树形DP. 套路地设 \(f_{u,i,0/1,0/1}\ ...
- kubeadm部署高可用master
准备阶段 master1 master2 master3 node1 关闭selinux,firewall setenforce 0 sed -i 's/SELINUX=enforcing/SE ...