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