我已经将Finger Scrolling实现到我的一个QListWidget中。 我已经参考了 http://www.developer.nokia.com/Community/Wiki/Qt_Kinetic_scrolling_-_from_idea_to_implementation
现在问题是当我向上和向下滚动列表时,QListWidget的on_current_row_changed事件被触发。 我如何在点击时避免这种情况,它应该表现得像点击不在滚动。
答案 0 :(得分:4)
从Qt5开始,这很简单:
#include <QScroller>
...
QScroller::grabGesture(myListWidget, QScroller::LeftMouseButtonGesture);
对于触摸屏,请使用TouchGesture
代替LeftMouseButtonGesture
。
如果窗口小部件未继承QAbstractScrollArea
(例如QWebView
):
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidget(myWidget);
QScroller::grabGesture(scrollArea, QScroller::LeftMouseButtonGesture);
请务必将窗口小部件的大小调整为其内容大小。
答案 1 :(得分:1)
您需要测试手指是否在mousePress和mouseRelease之间移动。您可以提取印刷机的位置,因此如果您将其存储在中间变量中,然后针对mouseRelease的位置进行测试(例如使用QPoint :: manhattanLength()),您可以判断手指是否已移动。如果有,则用户正在滚动,如果没有,则表示他们正在点击。
编辑:看看你链接的代码,他们已经在做上面的事了。我们能再看到你的重新实现吗?