我实现了一个图像浏览器,在那里我使用鼠标的控制盘事件来显示下一个图像。问题是,如果用户滚动得太快,则滚轮的位置值会跳过去,并吞掉两者之间的值。有人知道我怎样才能克服这个问题吗?如果我慢慢滚动,我得到一个递减的值(-1,-2,-3);如果我快速滚动,我得到类似于(-1,-5,-6,-11)的值。该问题出现在WindowsXP&;7上。
这是一个示例代码。
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
#############Define MyWindow Class Here ############
class MyWindow(QMainWindow):
##-----------------------------------------
def __init__(self):
QMainWindow.__init__(self)
self.label = QLabel("No data")
self.label.setGeometry(100, 200, 100, 100)
self.setCentralWidget(self.label)
self.setWindowTitle("QMainWindow WheelEvent")
self.x = 0
##-----------------------------------------
def wheelEvent(self,event):
self.x =self.x + event.delta()/120
print self.x
self.label.setText("Total Steps: "+QString.number(self.x))
##-----------------------------------------
##########End of Class Definition ##################
def main():
app = QApplication(sys.argv)
window = MyWindow()
window.show()
return app.exec_()
if __name__ == '__main__':
main()
这里似乎没有任何问题,因为Qt正确地报告了鼠标滚轮滚动的单位数。
一些鼠标驱动程序支持加速滚动,这意味着当轮子旋转得更快时,报告的滚动单位的数量会逐渐增加。单位为0.125度,大多数鼠标的基线滚动速度为每“凹口”120个单位。当车轮旋转得更快时(即120、240、360等),加速度只是将基线速度乘以一个增大系数。
因此,在qwheeleEvent中,滚动的“凹口”数量通过以下公式计算:
这正是问题中的示例代码已经做的事情。
如果要分别为每个“notch/step”重新注册,可以使用循环:
或者可以忽略加速度,只需为每个车轮事件注册向量:
相关问题 更多 >
编程相关推荐