Qt项目实战杂谈一二:网页/应用嵌入技术

2023-11-15

这一篇,应该说是满满的诚意了。很早之前就有完成此篇的打算,奈何一直没有时间。要么是沉迷于编码无法自拔,要么就是执着于释放身心的游戏而偷偷爽快不已。今天,我们说说老牌软件的一个趋势,和对应的某些技术细节的实现点。可能有点长,看这写吧。过长可能会考虑分篇章。

首先我们可以认识到这个趋势,国内对于自主研发基础软件的形式欣欣向荣。等到基础软件开发到一定阶段,平台化是很多软件厂商选择的一个方向。谁能精心雕琢、浑然天成的先集成最优秀的软件模块到自己平台(不管是自己开发还是买买买),就有可能打造国内航母级的工业(云)软件平台。

我们就只谈谈技术方面吧。老牌的公司,有一些沉淀了,也有几款自己不错的基础软件,这时候就可能想到如何把自己已有的这些软件集成到一个平台上来。是类似应用商店的存在,但又不仅仅是应用商店。不仅支持应用的自主上下架发布、授权管理等等等等,应用还能支持数据上云、多应用间拓展交互等等(当然这也是平台化的好处和亮点)。

已有应用的平台化是需要的,但是非必须。对于平台的整体体验来说,一些公司应该会考虑到应用界面的统一管理,并且最大程度减少平台化开发工作量,避免应用重构,往往会选择在已有的应有基础上做最小的改动。这时候不得不考虑到已有应用界面嵌入到平台的问题了。

在这里插入图片描述

具体嵌入怎么实现?怎样保证嵌入的应用方式稳定?又怎样保证嵌入的应用能够优雅退出? 嵌入的应用异常崩溃如何能保证不影响平台客户端呢?这里面涉及到比较多的问题,经过这段时间的摸爬滚打,这一套处理博主基本已经得心应手~ 具体的实现后续再开一篇讲一下。

平台客户端的集成差不多都是这个套路。说到底目前都有两个绕不过的技术方案:
在这里插入图片描述
我们对成熟的平台软件分析,很容易得到一些技术上的启发。譬如wps,网页嵌入必然使用的是cef,当前部分页面的展示可能也用到了webkit。
应用上的嵌入,wps的excel、ppt 等很明显是独立应用,启动之后却能在一个客户端上展示,这里猜想无非有两种方式:一种是启动之后嵌入,另一种就是excel.exe 之类的只是触发了启动的请求,真正通知启动的还是平台(没有具体研究,但是觉得这种穿裤子差屁股的方式应该不会是。),所以启动后嵌入应用的可能性极大。

肚子饿了,干饭去。后续再聊~

随便贴点东西,啥dn说审核不过也不知道原因。

#include <windows.h>

class ActionDelayPolicy_NoWait;

class ActionBase // Only needed if you want to use polymorphically different actions
{
public:
    virtual ~ActionBase() {}
    virtual void run() = 0;
};

template < typename Command, typename DelayPolicy = ActionDelayPolicy_NoWait >
class Action : public DelayPolicy, public Command,public ActionBase
{
public:
    virtual void run() {
        DelayPolicy::wait(); // inherit wait from DelayPolicy
        Command::execute();  // inherit command to execute
    }
};


class Action2:public ActionBase{
public:
    virtual void run(){
        cout << "start running ." << endl;
    }
};

// Real executed code can be written once (for each action to execute)
class CommandSalute
{
public:
    void execute() { std::cout << "Hi!" << std::endl; }
};

class CommandSmile
{
public:
    void execute() { std::cout << ":)" << std::endl; }
};

// And waiting behaviors can be defined separatedly:
class ActionDelayPolicy_NoWait
{
public:
    void wait() const {}
};

// Note that as Action inherits from the policy, the public methods (if required)
// will be publicly available at the place of instantiation
class ActionDelayPolicy_WaitSeconds
{
public:
    ActionDelayPolicy_WaitSeconds() : seconds_( 0 ) {}
    void wait() const { ::Sleep( seconds_ ); }
    void wait_period( int seconds ) { seconds_ = seconds; }
    int wait_period() const { return seconds_; }
private:
    int seconds_;
};

// Polimorphically execute the action
template <typename Action>
void execute_action( Action& action )
{
    action.run();
}


// Now the usage:
int main()
{
    // 基于模板函数实现的静态多态
    Action< CommandSalute > salute_now;
    execute_action( salute_now );

    Action< CommandSmile, ActionDelayPolicy_WaitSeconds > smile_later;
    smile_later.wait_period( 2000); // Accessible from the wait policy through inheritance
    execute_action( smile_later );

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt项目实战杂谈一二:网页/应用嵌入技术 的相关文章

  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代

随机推荐

  • LSTM原理及实现

    LSTM网络 LSTM核心思想 逐步理解LSTM 遗忘门 输入门 输出门 LSTM变体 多层LSTM LSTM实现手写数字 设置LSTM参数 初始化权值参数 训练 参考资料 前面我们介绍了RNN 现在我们来介绍一种特殊的RNN结构 LSTM
  • 如何用python编写程序打开csv格式文件

    目录 1 用pandas库打开 2 用python内置函数打开 1 用pandas库打开 用如下例子说明 import pandas as pd import os import csv data dir D a user file fna
  • Python 面向对象(三)

    6 3 多态 多态就是同一个对象在不同情况下有不同的状态出现 多态不是语法 是一种设计思想 多态性 一种调用方式 不同的执行效果 多态 同一事物的多种形态 动物分为人类 猪类 狗类 多态和多态性 Mixin设计模式 主要采用多继承方式对类的
  • Android 在已有工程中实现微信图片压缩

    这个我们需要自己去编译 但是已经有人帮我们编译好了 压缩算法也已经实现 因此 我们去下载然后编译即可 https github com bither bither android lib 首先将上面下载好的已经编译好的libjpeg放到jn
  • xubuntu+树莓派4:绕过登录界面,自动登录,直接进入系统

    二郎为什么要做这个呢 因为二郎想让树莓派直接运行起来 不要再去点击登录了 做这个的时候二郎找了很多网上的教程 发现普遍存在的问题是 不注明系统 一顿乱说 跟本解决不了问题 而且容易把系统搞崩 这里二郎再声明一遍 该方法适用于树莓派4系统安装
  • 文科生转行数据分析,分享我的大数据培训经历

    以下文章转载自一位培训数据分析小伙伴的分享 对于很多想转行学习大数据技术 参加大数据培训的小伙伴们 可以参考参考 很多人不敢承认自己是培训出来的 我今天来简单讲讲我参加数据分析培训的经理 大家有什么疑问的可以留言交流 我目前在四川一家大型移
  • 使用纯flutter3.0版本,2个dart文件,搭建ChatGPT简易版聊天客户端程序(含openai与api2d版本)

    文章目录 1 效果展示 2 按钮的搭建 1个组件 3 聊天窗口的搭建 1个dart 4 API请求的实现 1个dart 使用纯Flutter 3 0版本 仅需2个Dart文件 即可搭建ChatGPT简易版聊天客户端程序 包括OpenAI与A
  • CoreDNS篇9-kubernetes插件

    CoreDNS作为现阶段k8s的默认DNS服务以及服务发现的重要一环 其内置的kubernetes插件可谓是举足轻重 本文主要讲解介绍CoreDNS内置的核心插件kubernetes的使用方式和适用场景 CoreDNS的kubernetes
  • (1)哈希函数资料的整理

    一 哈希函数是什么 哈希函数 又叫散列函数 散列算法 是一种从任何一种数据中创建小的数字 指纹 也叫做摘要 的方法 什么意思呢 就是说 你输入任何长度 任何内容的数据 哈希函数输出固定长度 固定格式的结果 这个结果类似于你输入数据的指纹 只
  • Unity3d 发布打包后无法运行exe 报错Failed to load mono解决

    问题 点击运行发布后的 exe就会出现如下错误 解决 原来生成的包里的文件夹在拷贝时少拷了MonoBleedingEdge文件夹 我记得以前的生成包是没有这个文件夹的 这里需要将该文件夹一起拷贝 就可以解决该问题
  • DNS服务器的原理

    DNS服务器的原理 DNS Domain Name System 域名系统的简写 它是一种基于tcp upd的服务 同时监听在TCP和UPD的53号端口 刚开始 网络刚诞生的时候 只有很少的计算机接入网络 而随着个人PC的发展 网络成爆炸性
  • 过压过流保护芯片

    过压保护 负载如果是阻性负载 当电源有故障 负载上的电压有可能大幅上升 而电流的上升值不一定能超过过流保护值 此种情况宜用过压保护 例如工作在5V 可将电压保护值调至5 5V 如果电源故障只要电压升至5 5V时 电源会自动切断电压输出 2
  • TCP详解(2):三次握手与四次挥手

    TCP Transmission Control Protocol 传输控制协议 是基于连接的协议 也就是说 在正式收发数据前 必须和对方建立可靠的连接 就好像你给别人打电话 必须等线路接通了 对方拿起话筒建立了连接才能相互通话 一个TCP
  • 记一次挖矿病毒应急响应事件

    应急主机排查 近日 我们的安全技术人员安全检查过程中发现一组内网主机存在与外部互联网地址异常通讯行为 以下是对其中一台主机挖矿应急处置分析 查看Windows任务管理器 发现该主机的CPU使用率为100 结合实际业务情况初步判断该主机存在异
  • SQL注入(3)——SQLMAP

    本专栏是笔者的网络安全学习笔记 一面分享 同时作为笔记 前文链接 WAMP DVWA sqli labs 搭建 burpsuite工具抓包及Intruder暴力破解的使用 目录扫描 请求重发 漏洞扫描等工具的使用 网站信息收集及nmap的下
  • yum软件安装

    yum软件安装 1 软件安装卸载 安装rpm包 显示详细信息和进度条 rpm ivh vsftpd 3 0 2 25 el7 x86 64 rpm 查看vsftpd安装情况 rpm q vsftpd 删除已安装软件 rpm e vsftpd
  • uniapp返回上一页,回到顶部实现【记录】

    CSS样式中传入变量 鑫动了的主页 欢迎各位小伙伴 前端小白的成长之路 一起学习 一起成长 在返回上一页时如果不想停留在当前位置 想点击或者自动回到顶部可以用下面的方法 注 使用了scroll view并设置高度时再使用 uni pageS
  • nginx worker_connections exceed 1024 修改

    玩nginx配置的朋友 有时会见到这个提示 warn 3660 0 20000 worker connections are more than open file resource limit 1024 原来安装好nginx之后 默认最大
  • 对多态的理解

    1 虚函数 定义 前面有virtual关键字的成员函数就是虚函数 2 什么是多态 一 将派生类的指针赋给基类指针 则可通过基类指针调用派生类的同名虚函数 include
  • Qt项目实战杂谈一二:网页/应用嵌入技术

    这一篇 应该说是满满的诚意了 很早之前就有完成此篇的打算 奈何一直没有时间 要么是沉迷于编码无法自拔 要么就是执着于释放身心的游戏而偷偷爽快不已 今天 我们说说老牌软件的一个趋势 和对应的某些技术细节的实现点 可能有点长 看这写吧 过长可能