Web.md 7.3 KB
Newer Older
mahuifa's avatar
mahuifa 已提交
1 2 3 4 5 6 7 8
# Qt - Web混合开发Demo

[toc]

---

## 1、说明

mahuifa's avatar
mahuifa 已提交
9 10 11 12 13 14 15 16 17 18 19 20
|       类名       | 功能                                                       |
| :--------------: | ---------------------------------------------------------- |
|     minimal      | 使用QWebEngineView加载显示Web页面的最小示例1               |
|     minimal2     | 使用QWebEngineView加载显示Web页面的最小示例2               |
|  authorization   | 使用QWebEnginePage打开摄像头演示权限管理                   |
|   channelDemo    | 使用QtWebChannel实现Qt与Web通信交互(简单示例)            |
|   channelDemo2   | 使用QtWebChannel实现Qt与Web通信交互(进阶功能)            |
| channelWebSocket | 使用QWebSocket作为QWebChannel通信数据传输接口              |
|      QtJson      | 使用Qt内置json库读写json示例                               |
|    ChatClient    | 使用QWebSocket实现的简单客户端程序                         |
|    ChatServer    | 使用QWebSocketServer实现的简单服务端程序                   |
|  ChatClientHtml  | 前端网页版本WebSocket客户端程序(html+css+javascript实现) |
mahuifa's avatar
mahuifa 已提交
21
|     LoadWeb      | 使用CEF加载网页的简单示例程序                              |
mahuifa's avatar
mahuifa 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

 


## 2、相关博客

|                           相关博客                           |
| :----------------------------------------------------------: |
| 👉[CSDN](https://blog.csdn.net/qq_43627907/category_12140943.html)👈 |




## 3、实现效果

### 1.1 minimal

> 1. 保留最简单功能,去掉不易于理解的功能;                 
> 2. 分别演示了加载网络地址、资源文件中的Html文件,本地html的方式; 
> 3. 详细的注释,对初学者更友好。                      

![image-20221211210252527](Web.assets/image-20221211210252527.png)
mahuifa's avatar
mahuifa 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70



### 1.2 minimal2

> 1. 使用QWebEngineView加载显示Web页面的最小示例2
> 2. 保留最简单功能,去掉不易于理解的功能;                                             
> 3. 分别演示了【QWebEngineView::setHtml】【QWebEngineView::setContent】的使用方法;
> 4. 详细的注释,对初学者更友好。                                                  

* setHtml加载html代码

  ![image-20221214171041497](Web.assets/image-20221214171041497.png)

* setHtml加载html代码,并通过相对路径引用参数2的地址中的图片

  ![image-20221214171147965](Web.assets/image-20221214171147965.png)



### 1.3 authorization

> 1. 使用QWebEnginePage有时需要权限,例如打开摄像头、麦克风;
> 2. 这里演示了怎么实现授权功能;                     
> 3. 分别展示了打开【网络地址授权】和打开【本地html授权】。          

![image-20221215174224272](Web.assets/image-20221215174224272.png)
mahuifa's avatar
mahuifa 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83



### 1.4 channelDemo

> 1. 使用QtWebChannel实现Qt与Web双向交互;       
> 2. 构建后将html、css、js文件自动拷贝到可执行程序路径下;
> 3. web界面和qt界面实现双向通信。             

![channelDemo-tuya](Web.assets/channelDemo-tuya.gif)



mahuifa's avatar
mahuifa 已提交
84
### 1.5 QtJson
mahuifa's avatar
mahuifa 已提交
85 86 87 88 89 90 91

> 1. 使用Qt内置json库读写json示例                             
> 2. 实现生成json数据,插入json数组、json对象以及各种json支持的数据类型;
> 3. 将json数据保存到json文件中;                        
> 4. 从json文件中读取json数据,并使用【递归】的方式解析json数据。      

![image-20221215175419479](Web.assets/image-20221215175419479.png)
mahuifa's avatar
mahuifa 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107



### 1.6 channelDemo2

用QtWebChannel实现Qt与Web双向交互(2),进阶功能 ;

> 1. 
>    构建后将html、css、js文件自动拷贝到可执行程序路径下;                 
> 2. web界面和qt界面实现双向通信;                               
> 3. 由于QWebChannel传递数据只有可以转换为【JSON的数据类型】才可以传递,其它类型无法传递,例如QByteArray这些JSON不支持的数据类型,这里演示了可以传递的所有数据类型的使用方式;                         
> 4. Web界面中javascript直接读取Qt中注册对象使用Q_PROPERTY定义的【属性值】;
> 5. Web界面中javascript直接读取Qt中注册对象使用使用Q_ENUM标记的【枚举】;   
> 6. 定义一个带有返回值的槽函数,javascript调用该函数后可以获取【返回值】;        

![image-20221216124021490](Web.assets/image-20221216124021490.png)
mahuifa's avatar
mahuifa 已提交
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131



### 1.7 ChatClient

QWebSocket客户端简单示例   

> 1. 
>    实现连接、断开连接、数据发送、数据接收显示功能;

![image-20221217210219249](Web.assets/image-20221217210219249.png)



### 1.8 ChatServer

QWebSocketServer服务端简单示例

> 1. 使用QWebSocketServer创建一个服务端,使用【非安全模式】;  
> 2. 将所有连接的客户端加入列表,实现服务端同时向所有客户端发送信息;      
> 3. 实现将客户端传递过来的信息转发给其它所有客户端;              
> 4. 实现在关闭时释放所有客户端功能。                      

![image-20221217210336065](Web.assets/image-20221217210336065.png)
mahuifa's avatar
mahuifa 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161



### 1.9 ChatClientHtml

前端网页版本WebSocket客户端程序(html+css+javascript实现)

> 1. 使用html编写界面、css设置样式、javascript实现webSocket客户端程序;
> 2. 将html、css、js文件分开编写,便于阅读;                      
> 3. 程序编译后自动将html文件夹拷贝到可执行程序当前路径;                  
> 4. 可以直接点击chatClient.html文件运行客户端程序;               
> 5. 也可以在程序编译运行后使用QDesktopServices自动打开html文件。      

![image-20221219154051957](Web.assets/image-20221219154051957.png)



### 1.10 channelWebSocket

使用QWebSocket作为QWebChannel通信数据传输接口,实现与远程网页交互功能

> 1. 构建后将html、css、js文件自动拷贝到可执行程序A路径下;      
> 2. 使用QWebSocket作为QWebChannel通信接口;        
> 3. 通过QWebEngineView在Qt界面中嵌入Web网页;        
> 4. 一键调用浏览器打开html文件;                      
> 5. 基于WebSocket、QWebChannel.js实现网页和Qt通信功能;
> 6. 同时演示了Qt和嵌入网页界面、浏览器网页界面通信功能;           
> 7. 支持一个服务端与多个客户端Web界面进行通信交互,将WebSocket服务端封装在QWebChannel内部,一个WebChannel对应一个服务端、多个客户端。

![image-20221219154652982](Web.assets/image-20221219154652982.png)
mahuifa's avatar
mahuifa 已提交
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189



### 1.10 LoadWeb

* 工程说明

  > 将CEF库嵌入Qt中加载网页的简单示例程序;
  >
  > 使用的是封装过的QCefView库;

* 编译说明

  > 在主工程CefExamples.pro和各子工程中通过变量【CefPath】设置自己的CEF库文件路径,如果不设置则不会编译当前工程文件;
  >
  > 构建时会输出如图信息,为不同编译器的make路径;
  >
  > ![image-20230206155201961](Web.assets/image-20230206155201961.png)
  >
  > ![image-20230206155232023](Web.assets/image-20230206155232023.png)
  >
  > 选择编译Release模式->Build->添加Build步骤->Custom Process Stop,添加下列信息,MSVC编译器使用jom.exe;
  >
  > ![image-20230206155609104](Web.assets/image-20230206155609104.png)

* 演示

![image-20230206155736344](Web.assets/image-20230206155736344.png)