有没有办法让Flickable对电影不太敏感?
由于我在颠簸的环境中使用应用程序,因此ListView内的MouseArea上的点击有时会被注册为轻弹。 (我希望有一个快速解决方案,但更复杂或丑陋的解决方案也可以起作用)
答案 0 :(得分:0)
只需使用MouseArea
中的preventStealing
即可。来自文档:
此属性保存鼠标事件是否可能从此MouseArea中被盗。
如果MouseArea放置在过滤子鼠标的项目中 事件,例如 Flickable ,鼠标事件可能会被盗 MouseArea如果父项目识别出手势,例如一个电影 手势。 如果preventStealing设置为true,则没有项目会窃取 鼠标事件。
请注意,项目启动后将preventStealing设置为true 在下一次新闻发布会之前,窃取事件将无效。
默认情况下,此属性为false 。
如果此属性不够,您可以尝试处理Flickable
属性,例如pressDelay
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...