QComboBox使用鼠标进行滚动时,如果滚动到第一项或最末项会停止滚动。并且获取到的索引是变化后的,如向上滚动时第二项变至第一项,获得的索引为0,与在第一项向上滚动相同,可利用此特性判断是否需要循环滚动。
也因此不能直接在槽函数中获取当前索引来判断。,需重写鼠标滚动事件,提前获取未滚动前的索引。并在索引为0时设为最末,索引为最末时设为0。
class ComboBox(QComboBox):
wheeled = pyqtSignal()
def __init__(self, parent=None):
super(ComboBox, self).__init__(parent)
def wheelEvent(self, event):
idx = self.currentIndex() # 滚动前
super().wheelEvent(event)
idx1 = self.currentIndex() # 滚动后
if event.isAccepted():
if idx == idx1 == 0:
self.setCurrentIndex(self.count() - 1)
self.wheeled.emit()
elif idx == idx1 == self.count() - 1:
self.setCurrentIndex(0)
self.wheeled.emit()
'''
# 信号与槽(打印索引示例):
cbl = ComboBox()
cbl.addItems([1, 2, 3, 4, 5])
cbl.activated.connect(lambda : print(cbl.currentIndex()))
cbl.wheeled.connect(lambda : print(cbl.currentIndex()))
'''