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

How can I integrate Javascript library (socketio) in QML?

本文关键字:socketio Javascript 集成 QML      更新时间:2023-09-26

在C++socketio库失败后,我正在尝试使用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的第 3 行出现错误"[error stack]Expected token :''n"。这是一些不符合qml的javascript代码还是其他事情?我迷路了。

我做了一些解决问题的东西。我对此没有任何运气。我尝试将 SocketIO 的C++库编译到我的项目中,尝试包含 JS。但是没有任何效果,图书馆只是困惑。

所以我拿了Qt QWebSocket,把它包裹在一件温暖而模糊的外套里,在qml中看起来和工作,与SocketIO在Javascript中的工作方式非常相似。

https://github.com/Dimcon/ParthanonsQWebSocketIO

它适用于桌面和Android,您所要做的就是将parthanonsQWebSocket.h文件复制到您的项目中,然后将该类添加到QML中。有关自述文件的更多详细信息。

我希望这能帮助你们摆脱像我一样在这个问题上挣扎:( :)

我没有你所指的JS库的任何细节,但这里有在QML中使用自己的JS代码的方法。1. 将 JS 文件放入这样的资源文件中

   <qresource prefix="/js">
      <file alias="DataManager.js">qml/js/DataManager.js</file>
   </qresource>
  1. 在 QML 文件中使用以下导入

    导入 "qrc:/js/DataManager.js" 作为 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();
    }
    

    }