当在QML中使用Model控制界面时,如果需要在Model中动态添加颜色属性用于控制界面控件颜色时,直接传入color会报错:Unable to assign QJSValue to Qcolor。例如想实现如下一个Demo,左侧字体颜色由右侧ColorDialog用户选择的值控制
如果直接传递Color作为属性时,代码(错误):
fruitModel.append({"name":"Apple1","cost":3.5,"textColor":rectangle_1.color})//错误
fruitModel.append({"name":"Apple2","cost":3.5,"textColor":rectangle_2.color})//错误
fruitModel.append({"name":"Apple3","cost":3.5,"textColor":rectangle_3.color})//错误
此时字体颜色无变化,调试器报错:Unable to assign QJSValue to Qcolor。原因是在QML处理中,当颜色属性为字符时,QML会将该颜色自动转为Qcolor,而动态添加Model属性时,此时传入的model数据类型为javascript型数据,此时QML无法自动转为Qcolor,因此需指定传入值的类型为字符型。将上述添加代码修改如下即可:
fruitModel.append({"name":"Apple1","cost":3.5,"textColor":String(rectangle_1.color)})
fruitModel.append({"name":"Apple2","cost":3.5,"textColor":String(rectangle_2.color)})
fruitModel.append({"name":"Apple3","cost":3.5,"textColor":String(rectangle_3.color)})