我正在尝试使用变量附加到列表:
property var varOne: "#asdflkj"
如果我输入它,它会起作用:
listModel.append({"name":"#asdflkj"})
如果我尝试按照我的意图去做,我会收到一个错误(无法分配给不同类型的现有角色“名称”[VariantMap -> String]):
listModel.append({"name":varOne})
我在其他地方使用相同的变量作为字符串,没有问题:
property var temp: ""
temp += varOne
我究竟做错了什么?
编辑:好的,我想我缩小了问题的范围。我认为问题在于函数 Qt.rgba(),它为我提供了用户定义颜色的十六进制代码。我可以在任何地方将此函数的输出用作字符串(即标签、写入内存等)。但附加到列表模型会失败。我猜我误解了 Qt.rgba 输出是什么。这是我的最小可重复性。
import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Layouts 1.1
memTest: api.memory.get("Saved Colors").split(";")
ListModel {
id: colorModel
Component.onCompleted: {
for (var i = 0; i < memTest.length; ++i) {
append({"color1": memTest[0]})
}
}
}
function assignHexCodetoList() {
//this works
var temp = "#3d5c3e"
colorModel.append({"color1":temp})
//this doesn't work
var temp = Qt.rgba(0.5, 0.5, 0.5)
colorModel.append({"color1":temp})
//yet this works with either
var temp = Qt.rgba(0.5, 0.5, 0.5)
temp = memTest + ";" + temp
api.memory.set("Saved Colors",temp);
}
//Button that triggers the function
Rectangle {
id: button
Keys.onPressed: {
if (api.keys.isAccept(event)) {
assignHexCodetoList();
}
}
}
编辑2:我让它工作,但我所做的完全是愚蠢的。我可以显示 Qt.rgba() 的输出,就好像它是一个字符串:
Text {
text: Qt.rgba(0.5,0.5,0.5);
}
我得到一个十六进制代码。我可以通过以下方式输出到内存:
var temp = Qt.rgba(0.5,0.5,0.5);
为什么我不能将 Qt.rgba() 输出直接输入到 listmodel.append() 我不确定:
//doesn't work
listModel.append({"color":Qt.rgba(0.5,0.5,0.5)})
我将它分配为字符串,然后将其转换回十六进制代码,它可以工作:
var temp = "" + Qt.rgba(0.5,0.5,0.5); //basically convert to Qt.rgba() to string.
listModel.append({"color":temp});
我很想知道为什么会这样。网站上的 Qt.rgba 细节特别神秘,我不明白为什么我可以将输出显示为文本,将其作为字符串输出到内存,但不能在 listModel.append() 函数中使用作为一个字符串。有任何想法吗?