QCefView 简介

什么是QCefView

QCefView 是为 Qt 开发的一个封装集成了CEF(Chromium Embedded Framework)库的Wdiget UI组件。使用QCefView可以充分发挥CEF丰富强大的Web能力,快速开发混合架构的应用程序。它不需要开发者理解CEF的细节,能够在Qt中更容易的使用CEF,发挥CEF的能力。

它可以将网页轻松嵌入到Qt QWidget中,以Qt的开发逻辑来使用它,同时提供了方便直观的 JavaScript 与 C++ 互交互能力。所以,我们甚至可以直接以web的方式编写UI界面。

编译QCefView

首先,下载QCefView源代码:

git clone --recursive https://github.com/CefView/QCefView.git

在编译之前,先进行一些配置,修改根目录的CMakeLists.txt

option(BUILD_DEMO "Build the demo" ON)

即将编译demo的选项打开

然后,设置Qt的路径,如果已将Qt设置为环境变量,则不用管。

修改QtConfig.cmake

set(QT_SDK_DIR
  # Change this value to the Qt SDK path of your build environment
  "D:/Qt/5.15.2/msvc2019_64"
)

修改Qt SDK 的路径,如这里的D:/Qt/5.15.2/msvc2019_64

Windows 平台编译

这里以 Clion IDE为例,介绍如何编译并运行QCefView的example

选中根目录的CMakeLists.txt,右键使用Clion打开

在这里插入图片描述

注意,Clion打开之后,配置的时候,工具链需要选择Visual Studio
在这里插入图片描述

然后运行的时候,会自动下载CEF的二进制分发包,如果要指定CEF的分支或版本,可在CefViewCore/CefConfig.cmake里修改。

注意,这里的格式为112.3.0+gb09c4ca+chromium-112.0.5615.165,即将文件名cef_binary_112.3.0+gb09c4ca+chromium-112.0.5615.165_windows64删除首尾的字符串。

同时,别忘了Clion配置需要选择QCefViewTest
在这里插入图片描述
在这里插入图片描述

Linux 平台编译

Linux平台可使用QtCreator打开CMakeLists.txt,这里直接使用CMake命令演示:

在QCefView根目录下,打开终端,运行:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build -j10

然后即可在QCefView/build/example/QCefViewTest/output/Debug/bin路径下运行QCefViewTest程序

demo 讲解

这个QCefViewTest涉及的东西不少,依次讲解一番。

在这里插入图片描述

最左侧的这些按钮为Qt自带的控件:

Show Left DevTools

即打开左侧网页的的开发者工具

void
MainWindow::onBtnShowDevToolsClicked()
{
  if (m_pLeftCefViewWidget) {
    m_pLeftCefViewWidget->showDevTools();
  }
}

在这里插入图片描述

Reload Right QCefView

右侧网页重新加载url,这里设置的是加载Google(国内打不开)

void
MainWindow::onBtnReloadRightViewClicked()
{
  if (m_pRightCefViewWidget) {
    m_pRightCefViewWidget->navigateToUrl("https://www.google.com");
  }
}

Recreate Right QCefView

即重新加载右侧网页

void
MainWindow::onBtnRecreateRightViewClicked()
{
  createRightCefView();
}

ChangeColor

生成随机颜色改变左侧网页的颜色,这里是通知网页端进行更改的

void
MainWindow::onBtnChangeColorClicked()
{
  if (m_pLeftCefViewWidget) {
    // create a random color
    QColor color(QRandomGenerator::global()->generate());

    // create the cef event and set the arguments
    QCefEvent event("colorChange");
    event.arguments().append(QVariant::fromValue(color.name(QColor::HexArgb)));

    // broadcast the event to all frames in all browsers created by this QCefView widget
    m_pLeftCefViewWidget->broadcastEvent(event);
  }
}
// index.in.html  
function onLoad() {
    if (typeof CallBridge == "undefined") {
      alert("Not in CefView context");
      return;
    }

    CallBridge.addEventListener("colorChange", function (color) {
      document.getElementById("main").style.backgroundColor = color;
    });
  }

在这里插入图片描述

SetFocus

设置左侧的焦点,可参考QWidget的setFocus()

CallJsCode

为执行JavaScript代码,这里是弹出一个alert的对话框。

void
MainWindow::onBtnCallJSCodeClicked()
{
  QString context = "helloQCefView";
  QString code = "alert('hello QCefView'); return {k1: 'str', k2: true, k3: 100};";
  m_pLeftCefViewWidget->executeJavascriptWithResult(QCefView::MainFrameID, code, "", context);
}

在这里插入图片描述

NewBrowser

则是新建一个窗口

在这里插入图片描述

左侧网页

左侧网页为本地网页index.in.html,有很多元素用来演示C++与JavaScript的交互,popup窗口、iframe等。

Web Area

演示可以通过网页实现窗口的拖拽移动,按住鼠标左键移动窗口。

在这里插入图片描述

Test Case for InvokeMethod

Invoke Method是Javascript通知C++端的演示,弹出的对话框就是由QMessageBox弹出的

  function onInvokeMethodClicked(name, ...arg) {
    CallBridge.invokeMethod(name, ...arg);
  }
  function testInvokeMethod() {
    let d = {
      d1: true,
      d2: 5678,
      d3: "test object",
      d4: [1, "2", false],
      d5: {
        d1: true,
        d2: 5678,
        d3: "nested object",
        d4: [1, "2", true],
      },
    };
    onInvokeMethodClicked("TestMethod", 1, false, "arg3", d);
  }
void
MainWindow::onInvokeMethod(int browserId, int64_t frameId, const QString& method, const QVariantList& arguments)
{
  // extract the arguments and dispatch the invocation to corresponding handler
  if (0 == method.compare("TestMethod")) {
    QString title("QCef InvokeMethod Notify");
    QString text = QString("================== Current Thread: QT_UI ==================\r\n"
                           "Frame: %1\r\n"
                           "Method: %2\r\n"
                           "Arguments:\r\n")
                     .arg(frameId)
                     .arg(method);

    for (int i = 0; i < arguments.size(); i++) {
      auto jv = QJsonValue::fromVariant(arguments[i]);

      // clang-format off
          text.append(
              QString("%1 Type:%2, Value:%3\r\n")
              .arg(i).arg(arguments[i].typeName()).arg(arguments[i].toString())
          );
      // clang-format on
    }

    auto jsonValue = QJsonDocument::fromVariant(arguments);
    auto jsonString = QString(jsonValue.toJson());
    text.append(QString("\r\nArguments List in JSON format:\r\n%1").arg(jsonString));

    QMessageBox::information(this->window(), title, text);
  } else {
  }
}

在这里插入图片描述

Test Case for QCefQuery

演示将输入框里的内容发送给C++端

  function onCallBridgeQueryClicked() {
    var query = {
      request: document.getElementById("message").value,
      onSuccess: function (response) {
        alert(response);
      },
      onFailure: function (error_code, error_message) {
        alert(error_message);
      },
    };
    window.CefViewQuery(query);
  }
void
MainWindow::onQCefQueryRequest(int browserId, int64_t frameId, const QCefQuery& query)
{
  QString title("QCef Query Request");
  QString text = QString("Current Thread: QT_UI\r\n"
                         "Query: %1")
                   .arg(query.request());

  QMessageBox::information(this->window(), title, text);

  QString response = query.request().toUpper();
  query.setResponseResult(true, response);
  m_pLeftCefViewWidget->responseQCefQuery(query);
}

在这里插入图片描述

Test Case for Popup Browser

演示弹出两种popup窗口方式

<a href="#" target="_blank">Popup Browser By HTML</a>
<br />
<a href="#" onClick="window.open('#','QCefView Popup','width=800, height=600'); return false;">Popup Browser By Script</a>

An iframe with default borders

演示的是本地网页加载一个iframe页面,其余功能一致

右侧网页

右侧网页则是加载的在线网页

总结

至此,对于QCefView的编译及demo的功能讲解就结束了。由此可见QCefView的强大,与Web页面的交互能力,可以使得开发能更加的简便,也能使UI按照前端的逻辑设计成为可能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要编译qcefview,您需要按照以下步骤进行操作: 1.首先,确保您的电脑上已经安装了编译qcefview所需的软件工具,包括C++编译器(如GCC或Visual Studio)和CMake构建工具。这些工具可以通过官方网站或其他途径下载和安装。 2.下载qcefview的源代码。您可以在qcefview的官方GitHub存储库中找到源代码的链接。将源代码解压缩到您选择的目录中。 3.打开命令行终端,进入源代码所在的目录。 4.创建一个新的目录用于构建输出。在命令行中输入以下命令: ``` mkdir build cd build ``` 5.使用CMake来生成构建脚本。在命令行中输入以下命令: ``` cmake .. ``` 6.运行CMake生成的构建脚本来编译qcefview。在命令行中输入以下命令: ``` cmake --build . ``` 7.等待编译过程完成。这可能需要一些时间,具体取决于您的计算机性能和工程规模。 8.编译完成后,在构建目录中将会生成可执行文件或库文件,您可以使用它们来运行或集成qcefview。 这些是编译qcefview的大致步骤。请注意,具体的步骤可能会因您的操作系统或特定的编译环境有所不同,所以请根据您的设置和需要进行相应的调整。此外,关闭防火墙或安全软件可能会有助于编译过程的顺利进行。 ### 回答2: qcefview 是一款用于嵌入式浏览器的开源软件库。编译 qcefview 的过程比较简单。首先,确保你的电脑已经安装了 Visual Studio 2019,并且正确配置了 CMake。 首先,下载 qcefview 的源代码。你可以在 GitHub 上找到该项目的代码仓库。将源代码解压到你选择的目录中。 接下来,创建一个新的目录作为编译输出目录。我们将在这个目录中生成构建文件和编译结果。 打开 Visual Studio 2019,选择“文件”菜单中的“打开”选项,并选择你解压的 qcefview 源代码目录。Visual Studio 会自动识别源代码,并生成一个 CMakeLists.txt 文件。 然后,点击“CMake”的工具栏按钮。在弹出的窗口中,选择你刚刚创建的编译输出目录,并点击“生成”按钮。Visual Studio 会开始生成构建文件。 生成过程可能需要一些时间,一旦完成,你将在编译输出目录看到生成的构建文件。 接下来,点击“本地 Windows 调试器”工具栏按钮,Visual Studio 将开始编译 qcefview 项目。这个过程可能需要一些时间,具体时间还取决于你的电脑性能和项目大小。 一旦编译完成,你将在编译输出目录中看到生成的可执行文件和相关的库文件。你可以将这些文件复制到你的工程中,并根据你的需求进行使用。 编译 qcefview 的过程可能会有一些问题,可能涉及到依赖项的安装和配置。如果你在编译过程中遇到任何问题,可以参考 qcefview 的官方文档或在相关的开发者社区中寻求帮助。 ### 回答3: qcefview 是一个用于嵌入和展示 Chromium 浏览器功能的工具,它可以在 Windows、Mac 和 Linux 系统上运行。编译 qcefview 需要以下步骤: 1. 首先,确认你已经安装了 CMake、Python 和 Git 工具,这些是编译 qcefview 的必要工具。 2. 在命令行中,使用 Git 克隆 qcefview 的源代码库。你可以在 GitHub 上找到 qcefview 的源代码库,复制库的 URL 并使用 `git clone` 命令进行克隆。 3. 进入克隆的 qcefview 目录,运行以下命令以初始化依赖项: ``` python ./dependencies/depot_tools/roll-dep third_party ``` 这个命令将从第三方库中获取 qcefview 的依赖项,并将其放入正确的目录。 4. 然后,运行以下命令下载 Chromium 源码并进行初始配置: ``` python ./dependencies/depot_tools/bootstrap.py --no-nacl ``` 这个命令将下载 Chromium 的源代码,并创建一个用于编译的工具链。 5. 接下来,使用以下命令生成编译文件: ``` python ./dependencies/depot_tools/gclient.py runhooks ``` 6. 在命令行中,使用 CMake 工具为 qcefview 生成编译文件。你需要指定生成文件的目录。 ``` cmake -B build -S . -D CMAKE_BUILD_TYPE=Release ``` 这个命令将在 build 目录中生成 qcefview 的编译文件。 7. 最后,运行以下命令进行编译: ``` cmake --build build --config Release ``` 这个命令将使用 Release 配置编译 qcefview。 一旦编译完成,你将在 build 目录中获得可执行文件。请注意,编译 qcefview 可能需要一些时间和计算资源。如果遇到编译错误,你可能需要检查系统环境和依赖项配置,以确保正确编译 qcefview
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值