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 のバージョンは、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 デバイスではまだ完全ではありません。

他に何を試すことができますか?

私はあなたが私に与えることができるどんな助けにも感謝します. ありがとう!

4

1 に答える 1

6

あなたの問題の解決策はここにあります: qtcentre.org . そこで私の投稿を見てください。私の QScroller は現在正常に動作しています!

リンクが壊れた場合の Qt コードは次のとおりです。

ビューの verticalScrollMode を ScrollPerPixel に設定してみてください>

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