QComboBox调用currentIndex()返回错误索引值如何解决
问题原因
QComboBox.insertItem()的第一个参数是选项在下拉列表中的插入位置下标,不是和选项绑定的自定义值:
- 下拉列表的位置下标从0开始连续计数,不会预留空位。你第一次调用
insertItem(5, "x")时组件内无任何选项,位置5不存在,组件会自动将"x"放到第0位;第二次调用insertItem(19, "y")时列表仅1个项,位置19不存在,自动将"y"放到第1位。 currentIndex()返回的就是这个连续的位置下标,因此只会输出0或1,不可能得到你传入的5、19。
注意:不要尝试靠硬凑插入位置的方式匹配目标数值,只要后续列表有增删操作、或插入时目标位置不存在,位置下标就会偏移,取值必然出错。
正确实现方式
将需要绑定的自定义数值(5、19)存入选项的附加数据字段,插入选项时按正常顺序插入即可,取值时直接获取当前选中项的附加数据:
组件初始化代码
klients = qtw.QComboBox(self) # addItem参数顺序:显示文本、绑定的自定义数据 klients.addItem("x", 5) klients.addItem("y", 19)
如果需要指定插入位置,用insertItem的写法为klients.insertItem(插入位置, 显示文本, 自定义数据),顺序插入时直接用addItem更简洁。
点击回调取值代码
# 获取当前选中项绑定的自定义数据 print(klients.currentData())
运行后选中"x"会打印5,选中"y"会打印19,符合预期。这种写法是Qt官方推荐的标准方案,绑定的自定义数据不会随列表顺序变动、项增删而错位,稳定性更高。
内容的提问来源于stack exchange,提问作者xralf
相关产品推荐
相关产品推荐

