提问人:juzzlin 提问时间:11/2/2023 最后编辑:juzzlin 更新时间:11/3/2023 访问量:50
Qt 6:CMake 生成的 qmldir 中的 prefer-field 阻止单例工作
Qt 6: Prefer-field in CMake-generated qmldir prevents singletons from working
问:
我有一本简单的手册,工作正常:qmldir
singleton Constants 1.0 Constants.qml
但是,现在我切换到并生成了它,它做了如下操作:qt_add_qml_module()
qmldir
module MyApplication
typeinfo MyApplication.qmltypes
prefer :/MyApplication/
Main 1.0 Main.qml
singleton Constants 1.0 Constants.qml
这似乎是正确的,但现在应用程序在运行时无法再找到我的单例:
TypeError: Cannot call method 'connect' of undefined
我调试了这个问题,发现如果我删除单例,就会再次找到。我不明白这个问题,因为尽管有 -field,QML 引擎仍然可以加载其他 QML 文件,例如 Main.qml。prefer
prefer
这是怎么回事,如何解决?
我像这样启动应用程序:
engine->load("qrc:/MyApplication/Main.qml");
我尝试添加各种导入路径,但这似乎并不能解决它。
CMake 部分:
set_source_files_properties(Constants.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE)
qt_add_qml_module(MyApplication
URI MyApplication
VERSION 1.0
RESOURCE_PREFIX /
QML_FILES
Main.qml
Constants.qml
)
答:
2赞
JarMan
11/3/2023
#1
您只是在QML中缺少import语句。
import MyApplication
由于您现在使用的是模块,因此需要确保导入模块名称以访问单例。这有点令人困惑,因为在您的示例中,您的 Main.qml 似乎与单例位于同一模块中,因此认为导入是不必要的是可以理解的。我不确定为什么在需要导入时常规文件和单例之间存在差异。
评论
0赞
juzzlin
11/4/2023
Qt Creator不理解import语句增加了混乱。
评论
import MyApplication