QScroller动力学滚动不顺畅

时间:2013-10-10 14:24:41

标签: android ios qt

动态滚动对于使用Qt开发移动应用程序非常重要,我注意到它在设备上并不流畅(尝试使用Android设备和iphone)。它看起来有点不稳定,从一个位置跳到下一个位置,并且延迟跟随手指移动。特别是在尝试滚动缓慢时,这是可见的。设备中的其他应用程序滚动更顺畅,尤其是在iPhone中。

我使用仅包含按钮的QFrame(ui-> frame)制作了一个简单的测试项目。这些按钮被添加到QVBoxLayout。此框架添加到QcrollArea对象,该对象对触摸事件作出反应。此scrollArea添加到QGridLayout。所以滚动只是在垂直方向。

我在我的类的构造函数中有这个代码,它基于QFrame:

ui->frame->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
ui->frame->setMinimumHeight( 1000 );
ui->frame->setMaximumHeight( 1000 );

m_scrollArea    = new QScrollArea();

m_scrollArea->setWidget( ui->frame );
m_scrollArea->setWidgetResizable( true );
m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );

m_layout = new QGridLayout();
m_layout->addWidget( m_scrollArea );
m_layout->setContentsMargins( 0, 0, 0, 0 );
setLayout( m_layout );

QScroller::grabGesture( m_scrollArea, QScroller::LeftMouseButtonGesture );

我在代码中做错了什么,我该怎么做才能解决这个问题。其他人是否经历过同样的事情?我希望我的应用程序看起来尽可能本地化,这种不连贯的滚动实际上并不正常。

如果您需要更多信息,我会尝试提供。我可能会尝试在某处上传我的测试项目,并在需要时添加一些设备的屏幕截图。

我正在使用的Qt版本是5.1.1 for android和Qt 5.1.0RC1自我构建的ios。

我添加了

QScrollerProperties sp;
sp.setScrollMetric( QScrollerProperties::DragStartDistance,   0.001 );
sp.setScrollMetric( QScrollerProperties::ScrollingCurve, QEasingCurve::Linear );
QScroller* qs   = QScroller::scroller( m_scrollArea );
qs->setScrollerProperties( sp );

DragStartDistance使滚动更具响应性。我可以微调哪些其他属性以使滚动看起来更好? 我还注意到每次从QScrollArea收到QEvent :: Scroll时都不会调用GUI paintEvent(),我猜这可能会导致不连贯的滚动。因此,每次收到QEvent :: Scroll时,我都会添加代码重新绘制GUI,滚动看起来更平滑,但在Android设备中仍然不完美。

我还能尝试什么?

我会感谢你能给我的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:6)

问题的解决方案在这里:qtcentre.org。看看我的帖子。我的QScroller现在工作正常!

以下是链接中断时的Qt代码:

尝试将视图的verticalScrollMode设置为ScrollPerPixel >

setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);