【问题标题】:QScrollArea - how to enable touch interactions to scroll to next item?QScrollArea - 如何启用触摸交互以滚动到下一个项目?
【发布时间】:2011-06-17 01:53:15
【问题描述】:

我正在使用诺基亚 Qt SDK,并在顶部区域设计了一个小型横幅轮播。它看起来像这样:

层次结构如下:

在模拟器中安装后,我尝试使其可滚动(甩动)。我猜这是一个简单的任务(就像 Android 中的 ScrollView 或 iOS 中的 UIScrollView),但到目前为止还没有乐趣。互联网上的所有链接都指向我的自定义滚动实现等,我不想做也不想做,因为 Qt 应该是一个更高级别的框架?这里的最新技术是什么? ;-)

简而言之:我怎样才能让这个QScrollArea 响应触摸(轻弹、滚动、拖动等)事件并显示队列中的其他小部件?我不希望它能够“捕捉”到子小部件中(这是稍后的另一个要求;))。

【问题讨论】:

  • 我现在找到了QFingerScrollArea:youtube.com/watch?v=OPQ1VlyMPYU
  • QScrollArea 直接支持触摸交互(至少在较新的 qts 中)。虽然我还没有弄清楚,在哪种情况下(我的项目中有两个基于 QAbstractScrollArea 的控件。一个控件在触摸时滚动,另一个不滚动)。会很好,如果答案得到更新
  • QScroller::grabGesture(scrollArea->viewport(), QScroller::LeftMouseButtonGesture); 为我工作。

标签: qt symbian


【解决方案1】:

查看 Flickable(http://blog.qt.io/blog/2009/07/19/kinetic-scrolling-on-any-widgets/)和 FlickCharm(链接到第一个地址),了解如何自行实现或按原样使用它。

请注意,如果您的目标是 Maemo,则可能没有必要,因为它的 Qt 端口可以处理它。

【讨论】:

【解决方案2】:

您是否尝试过启用手势?手势支持我还没用过,不过看起来很简单

scrollEvents->grabGesture(Qt::SwipeGesture);
// or...
scrollEvents->grabGesture(Qt::PanGesture);

我不知道 QScrollArea 是否已经处理了手势,所以如果这不起作用,您可能需要继承 QScrollArea 并重写 event 方法来处理手势事件,如 Gestures Programming Guide 中所述。

【讨论】:

  • 这适用于 Qt 4.7 吗?由于诺基亚 Qt SDK 下载,我必须使用 Qt 4.6,对吗?至少没有下载4.7的选项。 (SDK 安装程序已损坏,网站下载仅提供捆绑的 4.6)。
  • 好的,我明白了;在 4.6 文档中也有,试试看,谢谢!
  • 是的,试过了——但没有任何乐趣。整个故事似乎很复杂。由于有些人实现了自定义 Touch/Fling 等响应程序,我感到非常震惊。希望找到一些更完整的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
相关资源
最近更新 更多