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