# QCefView 示例项目
本项目演示了 QCefView 框架的基本使用方法,包括 JavaScript 与 C++ 之间的交互。
项目结构
CefMain/
├── main.cpp # 程序入口
├── mainwindow.h # 主窗口头文件
├── mainwindow.cpp # 主窗口实现
├── mainwindow.ui # Qt Designer UI 文件
├── CMakeLists.txt # CMake 构建配置
├── HTML/
│ └── index.html # Web 资源页面
└── README.md # 本说明文件
功能特性
1. invokeMethod 方式调用 C++
JavaScript 通过 window.CallBridge.invokeMethod 调用 C++ 方法:
function onInvokeMethodClicked(name, ...arg) { window.CallBridge.invokeMethod(name, ...arg); }
C++ 端处理:
minWindow- 最小化窗口maxWindow- 最大化窗口normalWindow- 恢复正常窗口closeWindow- 关闭窗口cppLog- 输出日志到 C++ 控制台requestData- 请求 C++ 数据并通过事件广播返回
2. CefViewQuery 方式调用 C++
使用请求 - 应答模式进行异步调用:
let query = { id: 1, request: "Hello CPP", onSuccess: function(response) { console.log("Success: " + response); }, onFailure: function(error_code, error_message) { console.log("Failure: " + error_message); } }; window.CefViewQuery(query);
3. C++ 调用 JavaScript
通过事件广播触发 JS 回调:
QCefEvent event("reqData"); event.arguments().append("Hello world! CPP DATA."); _pCefView->broadcastEvent(event);
JavaScript 端监听:
window.CallBridge.addEventListener("reqData", function(data) { console.log("Received: " + data); });
依赖要求
系统依赖
- Qt 5.15+ 或 Qt 6.x
- CEF (Chromium Embedded Framework)
- QCefView 库
CEF 二进制包
从以下地址下载 CEF 二进制发行包: https://cef-builds.spotifycdn.com/index.html
编译说明
Linux 环境
# 创建构建目录 mkdir build && cd build # 配置 CMake cmake .. # 编译 make -j$(nproc) # 运行 ./CefMain
CMake 配置注意事项
在 Linux 上使用 CEF 时需要特别注意库的加载顺序,libcef.so 需要最先加载:
target_link_libraries(CefMain PRIVATE "-Wl,--no-as-needed -lcef" QCefView Qt${QT_VERSION_MAJOR}::Widgets )
参考资料
- QCefView 官方文档
- CSDN 博客原文
- QCefView 详细教程
技术要点
- 资源目录配置:使用
addLocalFolderResource注册本地资源目录 - 信号槽连接:连接
invokeMethod、cefQueryRequest、consoleMessage信号 - 异步通信:所有 JS-C++ 通信都是异步的
- 控制台日志:JS 的
console.log可通过consoleMessage信号在 C++ 端捕获
运行效果
启动程序后将显示一个内嵌浏览器的窗口,加载 index.html 页面,可以通过页面上的按钮测试各种交互功能。
注意:本项目需要在已安装 QCefView 和 CEF 的环境中编译运行。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/251560.html