QML ComboBox关闭弹窗后选中文本右滚,如何设置左对齐显示文本开头?
解决方案
你之前修改的是下拉弹窗内的条目委托,仅作用于展开的列表项,ComboBox关闭状态的显示区域由自身的contentItem属性控制,需要单独对其配置。
方案1:重写ComboBox的contentItem(通用方案,适用于Qt Quick Controls 2.x所有版本)
直接自定义显示区域的Text组件,配置左对齐、右省略即可,代码示例如下:
import QtQuick.Controls 2.15 ComboBox { id: comboBox width: 200 model: ["非常长的文本条目测试内容1111111111111", "非常长的文本条目测试内容2222222222222"] // 自定义关闭状态下的显示区域 contentItem: Text { leftPadding: 8 rightPadding: comboBox.indicator.width + 8 text: comboBox.displayText font: comboBox.font horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter elide: Text.ElideRight // 配置右端省略 } // 下拉列表的委托保持你之前已实现的elide配置即可 delegate: ItemDelegate { width: comboBox.width contentItem: Text { text: modelData elide: Text.ElideRight horizontalAlignment: Text.AlignLeft } } }
方案2:ComboBox为可编辑状态(editable: true)的适配
可编辑状态下默认的TextField会自动将光标移到末尾,需要额外配置光标位置固定到开头:
ComboBox { editable: true width: 200 model: ["非常长的文本条目测试内容1111111111111", "非常长的文本条目测试内容2222222222222"] contentItem: TextField { text: comboBox.displayText readOnly: true // 不需要编辑可设为true,禁止用户修改内容 elide: Text.ElideRight horizontalAlignment: Text.AlignLeft // 文本变化后自动将光标移到开头,保证优先显示文本前半段 onTextChanged: cursorPosition = 0 } }
配置完成后,选中任意长文本条目,ComboBox关闭状态都会优先显示文本开头,超出部分自动在右侧添加省略号,不会出现自动滚动到末尾的问题。
内容的提问来源于stack exchange,提问作者Me3nTaL
相关产品推荐
相关产品推荐

