QComboBox的下拉列表项文字宽度如果长于控件本身的宽度,就会出现省略号,并且每次选取后光标会跳到文本框末尾,看不到开头内容。本文通过一个子类重写相关默认设置参数以解决该问题。
class ComboBox(QComboBox):
def __init__(self, parent=None):
super(ComboBox, self).__init__(parent)
self.setView(QListView())
self.setStyleSheet("QComboBox {font: 13px} "
"QComboBox QAbstractItemView::item {min-height: 12px; min-width: 80px; }")
self.view().setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
# self.view().setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.view().setTextElideMode(Qt.ElideNone) # 取消省略
self.setLineEdit(QLineEdit()) # 绑定文本框
self.activated.connect(lambda: self.lineEdit().setCursorPosition(0)) # 选中后重设光标在左侧
# self.setFocusPolicy(False)
样式表中的min-width根据列表项中的最长文字设定。若小于文字长度会出现省略号。
若需启动ui时QComboBox中文字即从左侧开始显示,需在实例对象addItem之后,再添加setCursorPosition(0)。