キネティック スクロールは、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 のバージョンは、Android の場合は 5.1.1、iOS の場合は Qt 5.1.0RC1 セルフビルドです。
追加した
QScrollerProperties sp;
sp.setScrollMetric( QScrollerProperties::DragStartDistance, 0.001 );
sp.setScrollMetric( QScrollerProperties::ScrollingCurve, QEasingCurve::Linear );
QScroller* qs = QScroller::scroller( m_scrollArea );
qs->setScrollerProperties( sp );
DragStartDistance は、スクロールの応答性を高めます。スクロールの見栄えを良くするために、他にどのようなプロパティを微調整できますか? また、QEvent::Scroll が QScrollArea から受信されるたびに GUI の paintEvent() が呼び出されるわけではないことにも気付きました。そのため、QEvent::Scroll を受け取るたびに GUI を再描画するコードを追加しました。スクロールは少し滑らかに見えますが、Android デバイスではまだ完全ではありません。
他に何を試すことができますか?
私はあなたが私に与えることができるどんな助けにも感謝します. ありがとう!