我需要关闭QML代码的某些部分,因为此代码已用于演示目的,它将在最终版本中删除。但产品将与这些演示功能一起使用很长时间,所以我不能使用具有演示功能的单独分支,并不断将所有新功能合并到该分支 - 这样做不太方便。因此,运行此代码很容易,但在需要时可轻松关闭和/或删除。在C和C++中,我使用ifdef
宏,但在QML中可以这样做吗?如何在QML中模拟C风格的“ifdef”宏?
回答
如果你可以重构这些部分为自己的组件,你有两个选择:
第一个选项也许是有点接近C型#ifdef
宏比使用Loader
,因为它在文件级工作。只要你不过分使用Loader
(例如作为一个大视野的代表),他们都应该做得很好。
感谢您的回答。这两个选项做了不同的事情。我没有(也不能真正制作)单独的组件,我可以动态加载一个文件或一段代码。我宁愿在这里和那里分散一些代码,这些代码会引入一些属性,更改某些函数的流程,使用“Component.onCompleted”等等,所以这两种方法都没有什么帮助,除非我复制一些qml文件%相同,这对我来说似乎是一种矫枉过正。 – rightaway717
不幸的是,我认为你很幸运。 – Mitch
#ifdef
是一个预处理指令,即在C或C++编译器查看代码之前在构建时处理的东西。 您可以使用您选择的文本处理语言来执行相同的操作,在构建时处理QML文件,然后处理它们,例如由Qt资源编译器。
您还可以使用类DebugC与功能
Q_INVOKABLE bool isDebuggingEnable()
{
#ifdef QT_DEBUG
return true;
#else
return false;
#endif
}
,然后注册这个类在QML
viewer->rootContext()->setContextProperty("stName", DebugCObj)
现在你可以很容易地调用stName.isDebuggingEnable()检查,调试方法是启用或不在你的QML文件中。它只是一招
谢谢你的回答。我有2条评论 - 最好使用'QT_NO_DEBUG'或'QT_DEBUG'宏来检查项目是否以调试/发布模式编译,而不是创建一个新的。其次,这将像C#中的'ifdef'这样的普通'if'不像宏一样工作,这有点不同。 – rightaway717
QML不编译但在运行时解释,所以预处理指令不能被直接QML使用。 但是这不是一个限制,因为它可以从C++端引入QML属性,因此可以将指令放在C++端来处理这些属性,而基于这些属性的决策制定,正常if/then
,使用Javascript可以用于QML方面。
- 1. 我可以在Perl中模拟C风格的宏吗?
- 2. 在Python中模拟C宏
- 3. 如何编写扩展为`#ifdef ...#endif`宏块的C宏?
- 4. 带风格模拟的DrawGlyphRun?
- 5. ANTLR,C风格的宏定义
- 6. 在vim中,如何检查我目前在里面的#ifdef宏?
- 7. (模拟)Haskell中的宏?
- 8. 模拟铬选定的输入风格
- 9. 如何在C#中模拟C++联合?
- 10. ObjC宏ifdef和定义
- 11. #ifdef #else #endif宏问题
- 12. 如何模拟触摸屏风格的滚动?
- 13. 如何将C++模型公开到QML
- 14. 如何在c中模拟XHttpRequest#
- 15. 如何在C中模拟按键#
- 16. 如何在C#中模拟类成员?
- 17. 如何在C中模拟按键#
- 18. 如何在Ruby中模拟Ctrl + C?
- 19. 如何在Java中模拟C#as-operator
- 20. 在QML中使用C++模型,白页
- 21. 如何在Intellij中格式化Java代码,如C#风格?
- 22. 如何模拟jaspersoft studio中的表格
- 23. 使用宏来放置的#ifdef代码
- 24. 如何在宏C++
- 25. 如何模拟C++中的接口?
- 26. 如何模拟C#中的击键?
- 27. C++,#ifdef问题
- 28. 如何在android模拟器中启用麦克风输入
- 29. C中的新风格#
- 30. C++风格的注释风格
将您的代码放在'Component'中,然后使用所需的组件。 – folibis