我有QAbstractListModel
名为SerialPortList
,代表SerialPort
的列表。每个SerialPort
都有QList<int> supportedBaudRates
个属性。 SerialPortList
模型的display
角色只是QVariant::fromValue(mSerialPorts[i])
,即SerialPort
个实例。
我在Repeater
中显示我的列表模型(高度简化):
SerialPortList {
id: ports
}
Column {
Repeater {
id: portList
// ...
model: ports
Text { text: model.display.portName }
ComboBox {
model: model.display.supportedBaudRates
// ...
}
}
}
即串口名称列表,然后是一个支持波特率的组合框。
奇怪的是,尽管文本显示正常,但显然组合框model.display
未定义。如果我用这个替换组合框:
Text {
text: model.display.supportedBaudRates.join(" ")
}
然后它会产生你期望的结果!
这里发生了什么?我只能假设在model
中重新定义了ComboBox
,所以它认为它指的是自己,但我已经尝试了各种id引用,如portList.model.display.supportedBaudRates
我能想到的他们都没有工作。
修改
Kakadu指出,您不能使用QList<int>
作为模型。有点烦人,但我把它改成了QStringList
,你显然可以使用它。可悲的是,错误仍然是一样的。
修改2
我将model:
中的ComboBox
更改为model: { console.log("model: " + model); }
并打印1
,这使我确保model
引用自身。
答案 0 :(得分:0)
哦,我终于开始工作了!它只是一个命名空间问题 - model
是一个神奇的变量,所以你不能使用id限定符。
幸运的是,model.
隐式地被添加到委托中的任何变量访问中,因此我将我的代码更改为此并且它有效:
ComboBox {
model: display.supportedBaudRatesAsStrings
// ...
}
(...AsStrings
属性是原始QStringList
属性的QList<int>
副本。)