C++ Qt 学习(五):Qt Web 编程

1. Chrome 技术介绍

  • 大多数 web 技术都是基于 chrome,例如 CEF、QCefView 以及 QWebEngineView,这些都是在 native 界面里用来显示 html 网页,并且可以与 web 交互
    • 例如常见的登录窗口、优酷的视频区域、WPS 的稻壳商城等,这些都是用 web 技术实现的
    • 而 native 端,只需要把把网页展示出来,实现交互即可

2. VS2019 编译与使用 CEF

2.1 CEF 下载与编译

  • CEF 下载链接
    在这里插入图片描述

  • 下载上图箭头所指链接,解压后按下图重命名文件夹,并新建 build 和 sdk 两个文件夹
    在这里插入图片描述

  • 用 CMake 工具编译上述 CEF 包,按下图配置

    • 基于Windows的Cmake安装教程
      在这里插入图片描述
  • 编译成后点击上图中的 Open Project 进入 VS2019 中

    • F7 生成解决方案后报错如下,修改箭头处代码如图所示,保存后再次 F7 生成解决方案
      在这里插入图片描述

2.2 CEF 案例运行

  • 将 cefsimple 设置为启动项目,启动本地调试器,出现百度搜索界面
    • 注意修改下图代码中 url 链接为百度
      在这里插入图片描述

在这里插入图片描述

3. QWebEngineView 基本用法

  • Widget 提升为 QWebEngineView
    在这里插入图片描述

  • .pro 中添加头文件

    QT       += core gui webenginewidgets
    
  • widget.cpp

    #include "widget.h"
    #include "ui_widget.h"
    
    Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
        ui->setupUi(this);
    
        ui->web_widget->setUrl(QUrl("http://www.baidu.com"));
        ui->web_widget->show();
    }
    
    Widget::~Widget() {
        delete ui;
    }
    

在这里插入图片描述

4. Qt html js 交互

  • qt 除了可以显示网页,还可以和网页交互,互相发消息,调用函数

在这里插入图片描述

  • QtWebDemo.h
#pragma once

#include <QtWidgets/QWidget>
#include "ui_QtWebDemo.h"
#include "WebObject.h"

class QtWebDemo : public QWidget {
    Q_OBJECT

public:
    QtWebDemo(QWidget *parent = Q_NULLPTR);
    ~QtWebDemo();

public slots:
    void on_btnSend_clicked();
    void update_text(const QString& htmltext);

private:
    Ui::QtWebDemoClass ui;

    WebObject* m_pWebObj = nullptr;
};
  • QtWebDemo.cpp
#include "QtWebDemo.h"
#include <QWebChannel>
#include <QWebEnginePage>

QtWebDemo::QtWebDemo(QWidget *parent) : QWidget(parent) {
    ui.setupUi(this);

    QString path = QApplication::applicationDirPath() + "/WebPage/index.html";
    ui.webEngineView->setUrl(QUrl(path));

    m_pWebObj = new WebObject();

    QWebEnginePage* pPage = ui.webEngineView->page();
    // Qt 和 html js 的桥梁:QWebChannel
    QWebChannel* channel = new QWebChannel(this);

    // 注册 html 对象
    // 第二个参数需要是 QObject 的派生类
    channel->registerObject(QStringLiteral("content"), m_pWebObj); 
    pPage->setWebChannel(channel);

    connect(m_pWebObj, &WebObject::sig_SendToUI, this, &QtWebDemo::update_text);
}

void QtWebDemo::on_btnSend_clicked() {
    QString text = ui.lineEdit->text();
    m_pWebObj->SendTextToHtml(text);
}

QtWebDemo::~QtWebDemo() {
    delete m_pWebObj;
}

void QtWebDemo::update_text(const QString& htmltext) {
    ui.plainTextEdit->appendPlainText(htmltext);
}
  • WebObject.h
#pragma once

#include <QObject>

class WebObject : public QObject {
	Q_OBJECT

public:
	WebObject(QObject* parent = nullptr) :QObject(parent) {}
	~WebObject();

	void SendTextToHtml(const QString& text);

	// 接收来自 html 发来的内容,必须要加 Q_INVOKABLE,不然收不到
	Q_INVOKABLE void receiveTextFromHtml(const QString& r_text);

signals:
	void sig_sendTextToHtml(const QString& text);
	void sig_SendToUI(const QString& htmltext);
};
  • WebObject.cpp
#include "WebObject.h"

WebObject::~WebObject() {}

void WebObject::SendTextToHtml(const QString& text) {
	emit sig_sendTextToHtml(text);
}

void WebObject::receiveTextFromHtml(const QString& htmltext) {
	emit sig_SendToUI(htmltext);
}

5. Qt ECharts 使用详解

  • ECharts:比 QCustomPlot、QWT、QCharts 更好的开源图表曲线组件

在这里插入图片描述

  • widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
    ui->setupUi(this);

    QString exe_path = qApp->applicationDirPath();
    QString _klinePath = exe_path + "/myecharts/candlestick-simple.html";
    ui->web_widget->setUrl(QUrl(_klinePath));

    connect(ui->radioButton_kline, &QRadioButton::toggled, [=](bool checked){
        if(checked) {
            ui->web_widget->setUrl(QUrl(_klinePath));
        }
    });

    connect(ui->radioButton_line, &QRadioButton::toggled, [=](bool checked){
        if(checked) {
            QString _linePath = exe_path + "/myecharts/line-smooth.html";
            ui->web_widget->setUrl(QUrl(_linePath));
        }
    });
}

Widget::~Widget() {
    delete ui;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/126967.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拓世科技集团打造数字人营销解决方案,为车企提供新的“增长担当”

汽车&#xff0c;已经渐渐融入了现代人的日常生活&#xff0c;从高端的身份标志转变为普罗大众的出行选择&#xff0c;它驶入了千家万户&#xff0c;成为了我们日常出行的可靠伙伴&#xff0c;见证着人们的生活故事和时代的变迁。 中国汽车市场的蓬勃发展引起了业内外的广泛关…

ES|QL(Elasticsearch 查询语言)入门

作者&#xff1a;Ninoslav Miskovic 通过使用 ES|QL 直接从 Discover 创建聚合、可视化和警报&#xff0c;缩短获得见解的时间。 什么是 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;&#xff1f; ES|QL&#xff08;Elasticsearch 查询语言&#xff09;是 Elastic 全…

掌握互联网的未来:5G时代的新机遇

随着5G技术的快速发展&#xff0c;我们正步入一个全新的互联网时代。5G不仅仅是速度的飞跃&#xff0c;它还代表着无限的可能性和前所未有的创新机遇。本文将探讨5G如何重新定义互联网&#xff0c;并为您提供洞察如何抓住这波科技浪潮。 5G技术的核心优势 超高速度&#xff1a…

Python 3D建模指南【numpy-stl | pymesh | pytorch3d | solidpython | pyvista】

想象一下&#xff0c;我们需要用 python 编程语言构建某个对象的三维模型&#xff0c;然后将其可视化&#xff0c;或者准备一个文件以便在 3D 打印机上打印。 有几个库可以解决这些问题。 让我们看一下如何在 python 中从点、边和图元构建 3D 模型。 如何执行基本 3D 建模技术&…

人车实时精准管控!北斗让换流站作业更安全

换流站是高压直流输电系统的核心组成部分&#xff0c;对促进电网稳定运行、保障电力行业的可持续发展有着重要作用。长期以来&#xff0c;随着电网主变改扩建设工程的开展&#xff0c;站内作业人员安全管控压力随之增大&#xff0c;仅依靠传统的“人盯人”和“自主”管控模式较…

CLion配置libtorch找不到xxx.dll

项目场景&#xff1a; 使用CLion配置libtorch时遇到该问题 问题描述 使用CLion配置libtorch时&#xff0c;CMakeLists.txt文件写完后&#xff0c;cmake也能成功&#xff0c;但是一旦运行代码就会报错找不到xxx.dll&#xff0c;比如找不到torch_cuda.dll或找不到c10.dll 原因分…

随机链表的复制

题目描述 给你一个长度为n的链表&#xff0c;每个节点包含一个额外增加的随机指针random&#xff0c;该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。 深拷贝应该正好由n个全新节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的nex…

对话大众软件子公司:中国的智舱、智驾比欧洲早一代

作者 | 德新 编辑 | 王博 尤其在上海车展之后&#xff0c;大部分的外资车企都在转型调整。 2023年的上海车展是一个重要节点。在这之前&#xff0c;疫情阻断了国内和海外频繁的线下交流&#xff0c;而国内汽车的新能源化和智能化在这期间完成了一次飞跃式的发展。所以车展开…

打包 广告

小米广告 Type android.support.v4.app.INotificationSideChannel is defined multiple times d8clsPath: Error in D:\ChannelFolder\JJChannelPackageForTest\ToolConfigPath\channels-ad\ATemp-100057\xiaomi\lib\xiaomi_ad_merge_20231104.jar:android/support/v4/app/IN…

Leetcode-876 链表的中间结点

本人解法有点硬凑答案… /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

关于Office阻止访问嵌入对象的解决办法

问题 Word文档中想要下载嵌入的文件时被Office阻止了&#xff0c;无法下载。 解决办法 打开文件——选项——信任中心&#xff0c;在宏设置中启用所有宏&#xff0c;关于Macro、Acitve X插件等项目设置上&#xff0c;建议暂时全部设置为允许&#xff0c;看下相关对象的访问…

第五章《数据降维:深入理解 PCA 的来龙去脉》笔记

主成分分析(Principal Component Analysis&#xff0c;PCA) 就是机器学习中一种常用且有效的数据降维方法。 5.1 PCA是什么 PCA 将相关性高的变量转变为较少的独立新变量&#xff0c;实现用较少的综合指标分别代表存在于 各个变量中的各类信息&#xff0c;既减少高维数据的变…

C++ 信息学奥赛 2048:【例5.18】串排序

#include<bits/stdc.h> using namespace std; int main() {string s[25];//string类数组 int n;cin >> n;for(int i 1; i < n; i)cin >> s[i];sort(s1, s1n);//默认升序 调用函数默认排序 for(int i 1; i < n; i)cout << s[i] << endl;…

mysql隐式转换转换引起的bug

生产环境中遇到一个情况情况 &#xff0c;过滤数据发现过滤不掉相关值情况&#xff0c;具体情况如下 原始数据&#xff1a; CREATE TABLE test (id bigint(11) NOT NULL AUTO_INCREMENT COMMENT 自增id,subject_id bigint(11) NOT NULL DEFAULT 0 COMMENT 主题id,subject_nam…

从零实现label-studio和SAM进行半自动标注以及踩坑日志

这里写目录标题 引言什么是半自动标注conda环境创建与启动playground下载pytorch下载&#xff08;Linux服务端和Win10客户端&#xff09;SAM安装和预训练权重添加SAM相关库安装问题1 安装 Label-Studio 和 label-studio-ml-backend问题2&#xff1a;TypeError: numpy._DTypeMet…

嵌入式软件开发常用工具有哪些?

分享一些嵌入式软件开发常用工具。 1、Keil MDK&#xff1a;这是德国Keil公司开发的基于8051、9051、ARM7、ARM9系列微控制器的嵌入式软件开发工具&#xff0c;它提供了包括C编译器、宏汇编、连接器、库管理器、仿真器等在内的完整开发方案。Keil还提供了丰富的中间件和库函数&…

Verilog 之 initial 模块与always 模块的用法与差异

文章目录 initial语法和用法特点和注意事项用途 always语法和用法特点和注意事项用途 二者差异 initial 在 Verilog 中&#xff0c;initial 块是用来在模拟开始时执行一次性初始化操作的一种建模方式。它通常用于模拟初始条件或进行一次性的初始化设置&#xff0c;而且只会在模…

LINUX入门篇【4】开发篇--开发工具vim的使用

前言&#xff1a; 从这一篇开始&#xff0c;我们将正式进入使用LINUX进行写程序和开发的阶段&#xff0c;可以说&#xff0c;由此开始&#xff0c;我们才开始真正去使用LINUX。 介绍工具&#xff1a; 1.LINUX软件包管理器yum&#xff1a; 1.yum的介绍&#xff1a; 在LINUX…

Sublime Text Mac/Win中文版:代码编辑器的卓越典范

你是否曾为寻找一个功能强大且易于使用的代码编辑器而感到困扰&#xff1f;现在&#xff0c;我要向你介绍一个解决方案——Sublime Text。这款代码编辑器以其高效、灵活和直观的特点&#xff0c;赢得了开发人员的广泛喜爱。让我们深入了解一下Sublime Text的优点。 一、强大的…

易点易动固定资产管理系统:实现全生命周期闭环式管理和快速盘点

固定资产管理对于企业来说至关重要&#xff0c;它涉及到资产的采购、领用、使用、维护和报废等各个环节。然而&#xff0c;传统的固定资产管理方式往往繁琐、耗时&#xff0c;容易导致信息不准确和资源浪费。为了解决这些问题&#xff0c;我们引入易点易动固定资产管理系统&…