手指滚动QT?

时间:2011-10-19 12:00:44

标签: qt

我已经将Finger Scrolling实现到我的一个QListWidget中。 我已经参考了 http://www.developer.nokia.com/Community/Wiki/Qt_Kinetic_scrolling_-_from_idea_to_implementation

现在问题是当我向上和向下滚动列表时,QListWidget的on_current_row_changed事件被触发。 我如何在点击时避免这种情况,它应该表现得像点击不在滚动。

2 个答案:

答案 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()),您可以判断手指是否已移动。如果有,则用户正在滚动,如果没有,则表示他们正在点击。

编辑:看看你链接的代码,他们已经在做上面的事了。我们能再看到你的重新实现吗?