动态滚动对于使用Qt开发移动应用程序非常重要,但我注意到在设备上(尝试过Android设备和iPhone)滚动不够流畅。它看起来有点断断续续的,从一个位置跳到下一个位置,并且有延迟地跟随手指移动。这在尝试慢速滚动时尤为明显。设备中的其他应用程序滚动得更加平滑,尤其是iPhone。
我创建了一个简单的测试项目,其中包含QFrame(ui->frame),仅包含按钮。这些按钮添加到QVBoxLayout中。此框架添加到QcrollArea对象中,该对象响应触摸事件。并将此scrollArea添加到QGridLayout中。因此,滚动仅在垂直方向上进行。
我在基于QFrame的类的构造函数中使用了以下代码:
DragStartDistance属性可以使滚动更加响应。还有哪些属性可以微调以使滚动看起来更好呢? 我还注意到,每次从QScrollArea收到QEvent :: Scroll时,GUI paintEvent()并不总是被调用,这可能会导致不流畅的滚动。因此,我添加了代码,在接收到QEvent :: Scroll时每次重新绘制GUI,并且在Android设备上,滚动看起来有点更平滑,但仍然不完美。
我创建了一个简单的测试项目,其中包含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设备上,滚动看起来有点更平滑,但仍然不完美。
我还能尝试什么?
非常感谢你的帮助。谢谢!