如何在QML中集成Javascript库(socketio)?

3
C++ socketio library让我失望之后,我正在尝试在QT的QML中使用JavaScript库。我将客户端从https://cdn.socket.io/socket.io-1.4.5.js复制到socketio145.js
当我像这样导入它时:
.import "socketio145.js" as IO;

运行中:

socket = IO.io();

socketio145.js的第三行出现错误堆栈"[error stack]Expected token :'\n"。这是一些不符合QML标准的JavaScript代码还是其他问题?我很困惑。


你想做这件事的原因是什么? - evilruff
@evilruff 我想通过HTTPS进行通信,但C ++ socketio端口中尚未实现(请参见https://github.com/socketio/socket.io-client-cpp/issues/60)。我从14463638处汲取灵感,他们使用QWebView与socketio服务器通信(在5.6中已弃用)。如果您有建议,我很乐意以更好的方式完成它,因为我承认这种解决方案相当粗糙。 - nico
1
这个库是做什么的?如果这是WebSocket的实现,那么qml中已经有WebSocket项了。 - folibis
从我的有限理解来看,Socketio是WebSocket之上的一层,但在可能的情况下使用它。我从未想过尝试直接使用WebSockets。谢谢你给了我方向,我会试一试的。 - nico
我同意之前的帖子,Qt本身有很多支持WebSockets/HTTPS连接等的方式,引入新的第三方库看起来像是真正的负担或过度复杂化。 - evilruff
2个回答

1
我做了一件解决问题的事情。 我尝试将SocketIO的C++库编译到我的项目中,尝试包含JS,但是没有任何进展,库只是混乱了。 因此,我使用Qt QWebSocket并将其包装在一个温暖而舒适的外套中,在qml中看起来和SocketIO在Javascript中的工作方式非常相似。

https://github.com/Dimcon/ParthanonsQWebSocketIO

它可以在桌面和Android上运行,您只需将parthanonsQWebSocket.h文件复制到项目中,并将该类添加到您的QML即可。有关详细信息,请参阅自述文件。
我希望这能帮助你们避免像我一样苦苦挣扎 :)

0
我没有你所提到的JS库的任何细节,但是这是在QML中使用你自己的JS代码的方法。 1. 将JS文件放入资源文件中,像这样:
   <qresource prefix="/js">
      <file alias="DataManager.js">qml/js/DataManager.js</file>
   </qresource>
  1. 在您的 QML 文件中使用以下导入

    import "qrc:/js/DataManager.js" as DataManager

  2. 并像下面这样使用 JS:

    Item {
    id : win
    visible: true
    width: 640*2
    height: 480*1.5
    
    property var constellationManager;
    
    Component.onCompleted: {
        win.constellationManager = new ConstellationDataManager.ConstellationDataManager();
    }
    

    }


谢谢您的回答,这正是我正在做的,但是当我尝试导入socketio时出现了错误:https://cdn.socket.io/socket.io-1.4.5.js。 - nico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接