如何设置ComboBox宽度以适合最大的项目

Ed *_*Nio 5 combobox qml qt-quick

我希望我ComboBox必须适应我列表中width最长String Item的一个.

代码示例:

ComboBox {
    model: [ "Banana", "Apple", "ThisIsTheLongestWordThatIHave,"Coconut" ]
}
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?

Mar*_* Ch 5

有这个在快速控制-2组合框中没有内置机制(在写作,QT 5.9的时间),所以你必须自己做.像这样......

main.qml

MyComboBox {
    id: comboBox1
    sizeToContents: false
    model: [ "Banana", "Apple", "ThisIsTheLongestWordThatIHave", "Coconut" ]
}

MyComboBox {
    id: comboBox2
    anchors.top: comboBox1.bottom
    sizeToContents: true
    model: [ "Banana", "Apple", "ThisIsTheLongestWordThatIHave", "Coconut" ]
}
Run Code Online (Sandbox Code Playgroud)

MyComboBox.qml

ComboBox {
    id: control

    property bool sizeToContents
    property int modelWidth

    width: (sizeToContents) ? modelWidth + 2*leftPadding + 2*rightPadding : implicitWidth

    delegate: ItemDelegate {
        width: control.width
        text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
        font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
        font.family: control.font.family
        font.pointSize: control.font.pointSize
        highlighted: control.highlightedIndex === index
        hoverEnabled: control.hoverEnabled
    }

    TextMetrics {
        id: textMetrics
    }

    onModelChanged: {
        textMetrics.font = control.font
        for(var i = 0; i < model.length; i++){
            textMetrics.text = model[i]
            modelWidth = Math.max(textMetrics.width, modelWidth)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果你从一个QML列表改变模型类型,不同的类型,如C++ QStringList,QList<QObject*>或者QAbstractListModel,那么你migth需要修改此行textMetrics.text = model[i]来检索的方式略有不同从模型项目的文本.