android滚动条不顺畅,android – QScroller动力学滚动不顺畅

在使用Qt开发的Android和iOS移动应用中,作者遇到滚动不流畅的问题,表现为滚动时跳帧和延迟。问题出现在一个包含QFrame和QVBoxLayout的QScrollArea中,尽管尝试了设置大小策略和QScroller属性,但滚动仍然不理想。作者提到其他应用的滚动表现更佳,尤其是iPhone上的应用。已经尝试调整QScrollerProperties以提高响应性,但Android设备上仍不完美。作者寻求解决方案以实现更平滑、更本地化的滚动体验,并考虑在接收到QEvent::Scroll时强制重绘GUI,但效果仍有待改善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态滚动对于使用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设备中仍然不完美.

我还能尝试什么?

我很感激你能给我的任何帮助.谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值