QScroller动力滚动不流畅

5
动态滚动对于使用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设备上,滚动看起来有点更平滑,但仍然不完美。

我还能尝试什么?

非常感谢你的帮助。谢谢!

1个回答

6
你问题的解决方案在这里:qtcentre.org。看一下我在那里发布的帖子,我的QScroller现在运行良好!

如果链接失效,这里是Qt代码:

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

setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);

BartekR,我已经更新了帖子并提供了解决方案 - 至少我认为是这样。那里有很好的建议,欢迎 user3794624 加入社区。现在是时候将其更改为适当的用户名了 :-). - Stein Åsmul
1
这实际上帮助我解决了一个不同的问题:tableWidget 滚动得太快了,直到我改变了滚动模式。任何 QScrollerProperties 的设置都没有真正帮助。 - Ioan Paul Pirau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接