动态滚动对于使用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用于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设备中仍然不完美.
我还能尝试什么?
我很感激你能给我的任何帮助.谢谢!