Qt listview - 与点击相比,对滚动过于敏感

时间:2015-02-24 14:17:47

标签: qt qml

有没有办法让Flickable对电影不太敏感?

由于我在颠簸的环境中使用应用程序,因此ListView内的MouseArea上的点击有时会被注册为轻弹。 (我希望有一个快速解决方案,但更复杂或丑陋的解决方案也可以起作用)

1 个答案:

答案 0 :(得分:0)

只需使用MouseArea中的preventStealing即可。来自文档:

  

此属性保存鼠标事件是否可能从此MouseArea中被盗。

     

如果MouseArea放置在过滤子鼠标的项目中   事件,例如 Flickable 鼠标事件可能会被盗   MouseArea如果父项目识别出手势,例如一个电影   手势。 如果preventStealing设置为true,则没有项目会窃取   鼠标事件

     

请注意,项目启动后将preventStealing设置为true   在下一次新闻发布会之前,窃取事件将无效。

     

默认情况下,此属性为false

如果此属性不够,您可以尝试处理Flickable属性,例如pressDelay

修改

在Qt5中仍然可以使用

setStartDragDistance(ms)(评论中链接的代码是关于Qt窗口系统的 - QWS,自Qt 5.0发布以来不再支持AFAIK)。即使您应该QApplication,也会通过QGuiApplication公开此来电。 QApplication / QGuiApplication负责管理所谓的主事件循环,通常用于设置QML代码执行的环境。它位于您的main.cpp文件中,您应该放置代码。

如上所述,这种方法由QApplication公开。后者内部将呼叫转发给QGuiApplication。要使用QApplication,您需要导入小部件,即将QT += widgets添加到.pro文件(feature request link)。而不是我们可以公开私有GUI API并访问QGuiApplication内的相应方法。要执行此操作,只需1)添加到.pro文件QT += gui_private和2)打开main.cpp并编辑代码,使其如下所示:

QGuiApplication app(argc, argv);          // <--- app definition already present
QStyleHints * sh = app.styleHints();
sh->setStartDragDistance(/* NEW VALUE */);
// other code...

运行QMake并重新编译以应用更改。

如果您在使用私有API时无法填写,请在.pro文件中添加QT += widgets导入,并将QGuiApplication替换为QApplication。然后,您的main.cpp应如下所示:

QApplication app(argc, argv);          // <--- now a QApplication
QApplication::setStartDragDistance(/* NEW VALUE */);
// other code...