长春本地网站制作,公司设立流程七个步骤,江苏省交通工程建设局网站,网站模板拍卖QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的#xff0c;C的枚举定义方法 序言
概念
QML的枚举和C的其实差不多#xff0c;但是呢#xff0c;局限比较多#xff0c;首先不能在main.qml里定义#xff0c;也不能在子项中定义。
… QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的C的枚举定义方法 序言
概念
QML的枚举和C的其实差不多但是呢局限比较多首先不能在main.qml里定义也不能在子项中定义。
解释
main.qml的根节点定义枚举没法用main.或者Main.子项中定义比如说Rectangle里的Text你没法寻到此处的枚举直接Text.也不合适Text本身没有定义你自定义的枚举你是调用不了的
只允许两种定义方法一种是自定义控件里的根节点定义另一种是通过C的Q_ENUM定义。
注以上非绝对只是自己的经验总结可能只是暂时没遇到正确方法
命名规则
枚举要想在QML里用命名需要满足两个条件
1.枚举名首字母必须是大写不大写的话也会编译不过
enum rectType { //编译不过
...
enum RectType { //编译通过枚举项首字母也必须是大写
enum RectType {enum1, // 编译不过Enum2, // 编译通过以上是QML会编译出错但是要想在QML里用C也要遵守
在QML定义枚举的规范
与C相比枚举项的末项不能有,末尾的}后也无需;
enum RectType {Rect1,Rect2,Rect3 //编译出错不能加,
}用法
QML的枚举定义方法
如概念说的在自定义组件中的根节点定义枚举。
如果有属性获取的话可以用int或者var承载
testRect.qml
...Rectangle {...enum RectType {Rect1,Rect2,Rect3}//property int rectT: TestRect.Rect1 //有时可以有时会是undefinedproperty int rectT: TestRect.RectType.Rect1...
}调用方法[自定义组件名(首字母大写)].[枚举名].[枚举项]
供QML调用的C的枚举定义方法
具体怎么QML调用C的过程省略这不是本节重点
C定义需要遵守枚举名首字母大写枚举项大写的规则
class TestRect ...
...
public:enum RectType {Rect1,Rect2,Rect3,};Q_ENUM(RectType)
......console.log(TestRect.Rect2)调用方法
[自定义组件名(首字母大写)].[枚举项][自定义组件名(首字母大写)].[枚举名].[枚举项]
另外如果不是用enum而是用enum class那么调用方法就强制只能中间有枚举名 调用方法[自定义组件名(首字母大写)].[枚举名].[枚举项] console.log(TestRect.RectType.Rect3)