2013-10-10 17 views
5

Qt ile mobil uygulamalar geliştirmek için kinetik kaydırma çok önemlidir ve cihazlarda pürüzsüz olmadığını farkettim (android cihaz ve iphone ile denenmiş). Biraz garip görünüyor, bir konumdan diğerine atlıyor ve parmak hareketini gecikmeli olarak takip ediyor. Bu özellikle yavaş kaydırmaya çalışırken görülebilir. Cihazlardaki diğer uygulamalar özellikle iphone'da daha pürüzsüz bir şekilde geziniyor.QScroller Kinetik kaydırma düzgün değil

Sadece düğmeleri içeren QFrame (ui-> frame) ile basit bir test projesi yaptım. Düğmeler QVBoxLayout'a eklenir. Bu çerçeve, dokunma olaylarına tepki veren QcrollArea nesnesine eklenir. Ve bu scrollArea QGridLayout'a eklenir. Böylece kaydırma sadece dikey yönde.

Ben QFrame dayanmaktadır benim sınıfının yapıcı bu kodu vardır: benim kodunda yanlış bir şey yapıyor

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); 

Am ve ben bu şeyi düzeltmek için ne yapabiliriz. Başka biri aynı şeyi mi yaşıyor? Uygulamamın olabildiğince doğal görünmesini istiyorum ve bu titrek kaydırma gerçekten normal bir şey değil.

Daha fazla bilgiye ihtiyacınız varsa, sağlamaya çalışacağım. Test projemi bir yere yüklemeyi ve gerekirse cihazın ekran görüntüsünü eklemeye çalışabilirim.

Kullanmakta olduğum Qt sürümü ios için android ve Qt 5.1.0RC1 self-build için 5.1.1.

Ben DragStartDistance daha duyarlı kaydırma yapar

QScrollerProperties sp; 
sp.setScrollMetric(QScrollerProperties::DragStartDistance, 0.001); 
sp.setScrollMetric(QScrollerProperties::ScrollingCurve, QEasingCurve::Linear); 
QScroller* qs = QScroller::scroller(m_scrollArea); 
qs->setScrollerProperties(sp); 

eklendi. Kaydırma görünümünü daha iyi hale getirmek için başka hangi özellikleri ayarlayabilirim? Ayrıca GUI paintEvent() QEvent :: Scroll QScrollArea alındığında her zaman dalgalı kaydırma yol açabilir sanırım çağrılmadı fark ettim. Ben her zaman QEvent :: Scroll aldım ve kaydırma biraz daha pürüzsüz görünüyor ama yine de android cihazda mükemmel değil GUI yeniden boyamak için kod ekledi.

Başka neler deneyebilirim?

Bana verebileceğiniz herhangi bir yardımı takdir edeceğim. Teşekkürler!

cevap

6

Sorununuz için çözüm şu adreste: qtcentre.org. Gönderinime bir bak. QScroller'im şimdi iyi çalışıyor! İşte

durumda bağlantı sonları Qt Kodu geçerli:

ScrollPerPixel için görüş verticalScrollMode belirlemeyi deneyin>

setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); 
+0

BartekR, ben çözümü ile yazı güncelledik - ya da öylesine En azından düşünüyorum. Orada iyi tavsiyeler ve kullanıcı3794624 için topluluğa hoş geldiniz. Bunu düzgün bir kullanıcı adına da değiştirme zamanı. –

+1

bu aslında farklı bir sorunu çözmemde bana yardımcı oldu: tableWidget çok hızlı bir şekilde kaydırma yapıyordu, yani kaydırma modunu değiştirene kadar. QScrollerProperties’in herhangi bir ayarı gerçekten yardımcı olmadı –

İlgili konular