qt软件中需要嵌入浏览器,用到qcefview,如何是使用的详细步骤。

使用QCEFView的详细步骤(含CEF处理)

使用QCEFView确实需要先准备好CEF库,但不需要你从源码完整编译CEF。以下是详细步骤说明:

一、是否需要下载和编译CEF?

需要下载CEF二进制包,但不需要从源码编译CEF

  1. 必须下载CEF预编译的二进制包(包含已编译好的libcef等文件)
  2. 不需要自己用GN/ninja等工具从Chromium源码开始编译
  3. QCEFView在编译时会链接这些预编译好的CEF二进制文件

    下载地址 https://cef-builds.spotifycdn.com/index.html

二、完整使用步骤

第1步:下载CEF二进制包

  1. 访问 CEF构建服务器
  2. 选择对应平台的标准发行版(如Windows选cef_binary_xxx_windows64.tar.bz2
    • 版本建议选择标注"stable"的
    • 注意匹配你的系统架构(32位/64位)
  3. 解压到本地目录(例如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项目中集成

  1. 在你的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
}
  1. 基本使用代码:
#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\"

三、注意事项

  1. CEF版本匹配:QCEFView的README通常会注明兼容的CEF版本范围

  2. 子进程处理

    • CEF默认需要子进程(如renderer进程)
    • 确保发布时包含所有子进程可执行文件
    • 可通过设置关闭沙箱模式(但不推荐生产环境使用):
      CefSettings settings;
      settings.no_sandbox = true;
  3. DPI适配

    // 在main.cpp中尽早调用
    #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    #endif
  4. 调试技巧

    • 启用CEF日志:
      QCefSetting settings;
      settings.setLogSeverity(QCefSetting::LOGSEVERITY_VERBOSE);
    • 远程调试:访问 chrome://inspect

这样你就完成了QCEFView的集成,无需自己编译CEF,但必须正确获取和部署CEF二进制文件。

qt软件开发中cef库的使用的更多相关文章

  1. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  2. 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  3. 【大型软件开发】浅谈大型Qt软件开发(三)QtActive Server如何通过COM口传递自定义结构体?如何通过一个COM口来获得所有COM接口?

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  4. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  5. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  6. 软件开发中的完整测试所包括的环节UT、IT、ST、UAT

    软件开发中的完成测试环境所包括的环节包括:UT.IT.ST.UAT UT = Unit Test 单元测试 IT = System Integration Test 集成测试ST = System T ...

  7. 关于软件开发中兼容win7注册表的解决方案

    关于软件开发中兼容win7注册表的解决方案   编写人:CC阿爸 2014-3-14 l  近来在开发一winform程序时,发现在xp 系统访问注册表一切正常.可偏这个时候,微软又提醒大家.Xp今年 ...

  8. 软件开发中 SQL SERVER 任务的用法

    在软件开发中,经常性会用到定时任务.这个时候你可能会想到线程.但是事实中,线程方法比较麻烦.容易出错,资源竞争等问题,设计起来让你很头痛. 现在给大家提供一个新的思路,用SQL SERVER 的任务管 ...

  9. Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向

    Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主    过程导向 vs 结果导向 1. 一个伟大的事业必然是过程导向为主 1 1.1. 过程的执行情况(有明确的执行手册及标准) ...

  10. UML在软件开发中各个阶段的作用和意义

    经典的软件工程思想将软件开发分成5个阶段:需求分析,系统分析与设计,系统实现,测试及维护五个阶段. 之所以如此,是因为软件开发中饣含了物和人的因素,存在着很大的不确定性,这使得软件工程不可能像理想的, ...

随机推荐

  1. 元模型对AI的哲学意义:让机器真正"懂"世界

    元模型对AI的哲学意义:让机器真正"懂"世界 (用日常语言和比喻解释) 1. 传统AI像"死记硬背的学生" 问题:现在的ChatGPT就像背了无数词典的人,能对 ...

  2. 【DXP】如何在原理图中批量修改

    零.问题 想要修改所有电阻的封装,怎么解决? 一.解决 以修改所有电阻封装为例,可举一反三. 在电阻上右键,选择"查找相似对象". 注意在右键的时候鼠标应该是放在元器件图标上的,而 ...

  3. 【Win32】通过多线程自动关闭对话框的方法

    零.需求 希望在Windows开机后自动弹出个对话框提示一下,过8秒后自动关闭 一.解决 1.建项目和源文件 在VC6.0中新建Win32项目 新建C++源文件 2.编写代码 基础结构 #includ ...

  4. MySQL 修复损坏表

    修复MySQL损坏表的简单步骤,不一定适用任意情况下的表损坏的问题,留爪. 简单3步曲: # 用`root`用户登录MySQL # 这里可能需要输入密码 mysql -uroot -p # 使用指定数 ...

  5. sql server2008r2其中一张表不能任何操作

    用户的数据库一张高频表,使用select count(*) from t1 竟然一直在转圈,显示开始,而没有end. 找尽原因不得果.把数据库备份后在恢复,可以使用几小时,之后又是老毛病抽风. 用户生 ...

  6. c数组与结构体

    数组,存储同类型的复合类型:结构体,存储不同类型的复合类型,用于自定义数据结构. 计算机中,针对存储大量数据的集合,有着两种方式,一种是以块式集中存储数据,这就是数组的存储方式,大量同类型的数据集中放 ...

  7. MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题

    MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题 问题背景 在停服发版更新时,需对 200GB 大表(约 200 亿行数据)进行快速备份以预防操作失误. 因为曾经出现过有开发写的发 ...

  8. Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

    2025跨平台ai实战electron35+vite6+arco仿DeepSeek/豆包ai流式打字聊天助手. electron-deepseek-chat:实战ai大模型对话,基于vue3.5+el ...

  9. SpringBoot3 使用 SolonMCP 开发 MCP

    之前发了个 "<SpringBoot2 可以使用 SolonMCP 开发 MCP(江湖救急)>".然后,有人问:SpringBoot3 能不能用 SolonMCP? 其 ...

  10. Python标准库之Collections---Container datatype

    Deques Deques,即 Double-ended-queues,是支持线程安全,内存高效的列表类对象.Deques是可改变的,支持索引等类似于list的操作,然而,我们不能直接对Deques进 ...