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 设备中仍然不完美。

我还能尝试什么?

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

4

1 回答 1

6

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

这是链接断开时的Qt代码:

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

setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
于 2014-07-16T13:27:07.723 回答