##场景描述
- 在
Qt Widgets Application
中使用QWebSocket
模块时,开发中引用正常(Desktop构建模式),但是使用windeployqt
工具部署时,对应的依赖库是没有添加进去的,导致部署失败 - 在
QtQuick/V-Play Application
中使用Qt.WebSocket
模块时,开发中引用正常(Desktop构建模式),使用windeployqt
工具部署后,对应的依赖库也没有添加进去,导致部署失败 - 在
QtQuick/V-Play Application
中使用Qt.WebSocket
模块时,开发中引用异常(Android构建模式),使用部署生成.apk
后,找不到对应的模块,导致部署失败
##解决方案(场景1 & 场景2)
场景1和2的部署失败,可以通过windeployqt
工具部署后(Desktop构建模式),把QWebSocket
对应的依赖库可以手动拷贝一份来解决(有工具还需要手搓总是不爽的)
##解决方案(场景3) 场景3中其实有2个问题:
- 开发中找不到
import Qt.WebSocket 1.0
找不到对应的模块(Android构建模式) - 部署中
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
相关的路径
%QtDir%/android_armv7/qml/Qt/Websocket/
,这个目录下只有一个qmldir
文件,内容如下:
module Qt.WebSockets
plugin declarative_qmlwebsockets ../../QtWebSockets/
classname QtWebSocketsDeclarativeModule
typeinfo plugins.qmltypes
%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等其他平台估计也有一样的问题,可以参考一下
来源:oschina
链接:https://my.oschina.net/u/1985083/blog/666284