Qt.WebSocket导致的部署失败及解决方案

##场景描述

  1. Qt Widgets Application中使用QWebSocket模块时,开发中引用正常(Desktop构建模式),但是使用windeployqt工具部署时,对应的依赖库是没有添加进去的,导致部署失败
  2. QtQuick/V-Play Application中使用Qt.WebSocket模块时,开发中引用正常(Desktop构建模式),使用windeployqt工具部署后,对应的依赖库也没有添加进去,导致部署失败
  3. QtQuick/V-Play Application中​使用Qt.WebSocket模块时,开发中引用异常(Android构建模式),使用部署生成.apk后,找不到对应的模块,导致部署失败

##解决方案(场景1 & 场景2) 场景1和2的部署失败,可以通过windeployqt工具部署后(Desktop构建模式),把QWebSocket对应的依赖库可以手动拷贝一份来解决(有工具还需要手搓总是不爽的)

##解决方案(场景3) 场景3中其实有2个问题:

  1. 开发中找不到import Qt.WebSocket 1.0找不到对应的模块(Android构建模式)
  2. 部署中Qt.WebSocket模块的依赖库没有添加进来

而每次部署生成.apk(Android构建模式),都会重新构建和自动添加依赖库,没法通过手搓来有效控制Qt.WebSocket依赖库的添加:(

  • 针对问题1:

Qt.WebSocket的文档是这么说的:
Note: Prior to Qt 5.5, the import statement was import Qt.WebSockets 1.0 (notice the dot between Qt and WebSockets). The old statement is still supported for backwards compatibility, but it cannot be mixed with the new statement within the same project

为了兼容旧版本语法是什么鬼?然后我去找了下对应的依赖库路径,发现有2个WebSocket相关的路径

  1. %QtDir%/android_armv7/qml/Qt/Websocket/,这个目录下只有一个qmldir文件,内容如下:
module Qt.WebSockets
plugin declarative_qmlwebsockets ../../QtWebSockets/
classname QtWebSocketsDeclarativeModule
typeinfo plugins.qmltypes
  1. %QtDir%/android_armv7/qml/QtWebSockets/,这个目录下有qmldir & plugins.qmltypes & libdeclarative_qmlwebsockets.so这3个文件,这里的qmldir文件,内容如下:
module QtWebSockets
plugin declarative_qmlwebsockets
classname QtWebSocketsDeclarativeModule
typeinfo plugins.qmltypes

稍微总结下我们可以这样理解:Qt.WebSocket(为了兼容Qt5.5.1之前的语法)最终指向QtWebSocket,那么我们直接使用新语法试试?

//import Qt.WebSocket 1.0 //这是旧语法,注释掉
import QtWebSocket 1.0 //新语法
//...code...

然后构建-部署-运行,一切正常.

##Tips:Mac/Linux等其他平台估计也有一样的问题,可以参考一下

转载于:https://my.oschina.net/jannn/blog/666284

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值