模型中的QML模型是未定义的



我有一个名为SerialPortListQAbstractListModel,它代表SerialPort s的列表。每个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(" ")
            }

那么它就会产生您所期望的结果!

这是怎么回事?我只能假设modelComboBox内被重新定义,所以它认为它指的是自己,但我已经尝试了各种id引用,如portList.model.display.supportedBaudRates,我能想到的,它们都不起作用。

编辑

Kakadu指出,你不能使用QList<int>作为模型。有点烦人,但我已经把它改成了QStringList,你显然可以使用。遗憾的是,错误仍然是相同的。

编辑2

我将ComboBox中的model:更改为model: { console.log("model: " + model); },它打印1,这使我确保model指的是自己。

我终于让它工作了!这只是一个名称空间问题——model是一个神奇的变量,所以你不能在它上面使用id限定符。

幸运的是,model.隐式地添加到委托中的任何变量访问,因此我将代码更改为此,它工作了:

    ComboBox {
        model: display.supportedBaudRatesAsStrings
        // ...
    }

(...AsStrings属性是原QList<int>属性的QStringList副本)

相关内容

  • 没有找到相关文章

最新更新