Qt 多个QML文件,其中调用了项ID(导致referenceError)

Qt 多个QML文件,其中调用了项ID(导致referenceError),qt,qml,Qt,Qml,我对Qt比较陌生,目前正在帮助维护和扩展Qt项目。我没有将所有UI都放在一个qml文件中,而是将它们组织为每个页面/窗口都放在单独的qml文件中(例如HomePage.qml、ConnectionStatusPage.qml) 由于在其他项目的(以前的)主UI代码中调用并使用了一些项目ID,现在我在其他文件中出现了referenceError。该项目正在扩展并变得越来越复杂,将创建许多新的UI,并且定义的项是一个文件也将在其他文件中使用 我怎样才能正确地引用其他文件中的项目而不必 错误 为一个应

我对Qt比较陌生,目前正在帮助维护和扩展Qt项目。我没有将所有UI都放在一个qml文件中,而是将它们组织为每个页面/窗口都放在单独的qml文件中(例如HomePage.qml、ConnectionStatusPage.qml)

由于在其他项目的(以前的)主UI代码中调用并使用了一些项目ID,现在我在其他文件中出现了referenceError。该项目正在扩展并变得越来越复杂,将创建许多新的UI,并且定义的项是一个文件也将在其他文件中使用

  • 我怎样才能正确地引用其他文件中的项目而不必 错误
  • 为一个应用程序构建代码UI文件的适当方式是什么 可扩展和可重用的方式(我相信有适当的方式)
  • 代码示例:

    HomePage.qml

    // previous code ...
    Item {
        id:websocket
        void func_1():
            ...
        }
    
    ConnectionStatusPage.qml

    // Label item
    Label {
        id: labelFirst
        text: websocket.status == someStatus ? option_1 : option_2
        }
    
    运行此命令会导致以下错误:

    ReferenceError:未定义websocket


    我发现使用QtObject单例很有效。有关QtObject的详细信息,请单击此处:

    它们是QML中最基本的非可视容器

    有关单身人士的信息:

    这允许您将对UI外部的持久单例对象的引用导入到任何UI QML文件中。尝试将有状态的非UI功能放入UI QML(正如您所发现的)是很难管理的,因为UI的动态创建和破坏以及维护UI其他部分对它的引用的困难


    因此,我将您的websocket功能移动到一个新的QtObject单例,该单例将同时导入HomePage和ConnectionStatusPage。

    Typo?在HomePage.qml中,您的id是
    webSocket
    ,但在另一个页面中,您要查找
    webSocket
    。它们是区分大小写的。在这个特定的问题中是否有拼写错误,请编辑,谢谢您的提醒。但是代码没有拼写错误。对于你的问题#1,有很多方法可以做到这一点,这取决于你的应用程序的结构。一个最小的、可重复的例子可能有助于给出更具体的答案。对于#2,这个问题非常广泛,可能是基于观点的。@AnasAG请为第一个问题提供答案,我在这篇文章中找到了一个解决方案。我将更详细地检查QtObject Singleton,看看它是否是正确的方法,感谢您的提及。