0

我正在尝试使用变量附加到列表:

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() 函数中使用作为一个字符串。有任何想法吗?

4

0 回答 0