Qt Combobox中文本的对齐方式

时间:2018-06-07 15:47:54

标签: android qt qml

我在Qt中有一个组合框,里面有一些项目。现在的问题是,当文本太长而且选择了项目时,项目的右侧会显示,我想显示文本的左侧(开头)和...结尾(其余的)不会显示不适合在框中的文本)有没有办法做到这一点? 。我一直在搜索整个互联网和文件,但我找不到合适的答案。感谢。

1 个答案:

答案 0 :(得分:1)

目前没有简单的方法可以做到这一点。您需要为ComboBox本身提供自定义委托,然后覆盖其contentItem以便能够设置elide属性:

import QtQuick 2.7
import QtQuick.Controls 2.0

ApplicationWindow {
    id: window
    visible: true
    width: 400
    height: 400

    ComboBox {
        id: comboBox
        model: [ "some really really really long text", "some really really really long text" ]
        delegate: ItemDelegate {
            id: itemDelegate
            width: parent.width
            text: comboBox.textRole ? (Array.isArray(comboBox.model) ? modelData[comboBox.textRole] : model[comboBox.textRole]) : modelData
            font.weight: comboBox.currentIndex === index ? Font.DemiBold : Font.Normal
            highlighted: comboBox.highlightedIndex === index
            hoverEnabled: comboBox.hoverEnabled

            contentItem: Label {
                text: itemDelegate.text
                font: itemDelegate.font
                elide: Label.ElideRight
                verticalAlignment: Label.AlignVCenter
            }
        }
    }
}

我从here复制了delegate实施。

我认为ItemDelegate(或更确切地说AbstractButton,以便它的所有衍生品都可以从中受益)有一个elide属性是有意义的,所以它少了一个自定义项目。