2013-10-10 2 views
5

Kinetic Scrollen ist sehr wichtig für die Entwicklung von mobilen Anwendungen mit Qt und ich bemerkte, dass es auf den Geräten nicht glatt ist (mit Android-Gerät und iPhone versucht). Es sieht etwas abgehackt aus, springt von einer Position zur nächsten und folgt der Fingerbewegung mit Verzögerung. Dies ist besonders sichtbar, wenn Sie versuchen, langsam zu blättern. Die anderen Anwendungen in den Geräten scrollen vor allem im iPhone viel reibungsloser.QScroller Kinetic Scrollen ist nicht glatt

Ich habe ein einfaches Testprojekt mit QFrame (ui-> frame) erstellt, das nur Schaltflächen enthält. Die Schaltflächen werden zu QVBoxLayout hinzugefügt. Dieser Rahmen wird dem QcrollArea-Objekt hinzugefügt, das auf Berührungsereignisse reagiert. Und dieser scrollArea wird zu QGridLayout hinzugefügt. Das Scrollen erfolgt also nur in vertikaler Richtung.

Ich habe diesen Code im Konstruktor meiner Klasse, die auf QFrame basiert:

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

Bin ich etwas falsch in meinem Code zu tun und was kann ich tun, um diese Sache zu beheben. Hat jemand anderes dasselbe erlebt? Ich möchte, dass meine Anwendung so nativ wie möglich aussieht, und dieses unruhige Scrollen ist wirklich nicht normal.

Wenn Sie weitere Informationen benötigen, werde ich versuchen, zu liefern. Ich kann versuchen, mein Testprojekt irgendwo hochzuladen und bei Bedarf eine Bildschirmaufnahme des Geräts hinzuzufügen.

Die Qt-Version, die ich verwende, ist 5.1.1 für den Android und Qt 5.1.0RC1 Self-Build für den IOS.

Ich habe

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

Die DragStartDistance das Scrollen mehr ansprechbar macht. Welche anderen Eigenschaften kann ich einstellen, um das Scrollen besser aussehen zu lassen? Ich habe auch bemerkt, dass die GUI paintEvent() nicht jedes Mal aufgerufen wird, wenn QEvent :: Scroll von QScrollArea empfangen wird, was zu einem unruhigen Scrollen führen kann. Also habe ich Code hinzugefügt, um die GUI jedes Mal neu zu streichen, wenn ich QEvent :: Scroll erhalte und das Scrollen im Android-Gerät etwas glatter, aber immer noch nicht perfekt aussieht.

Was kann ich noch versuchen?

Ich freue mich über jede Hilfe, die Sie mir geben können. Vielen Dank!

Antwort

6

Die Lösung für Ihr Problem ist hier: qtcentre.org. Schaut dort in meinem Post nach. Mein QScroller funktioniert jetzt gut! Hier

ist das Qt-Code, falls die Verbindung bricht:

Versuchen Sie, die verticalScrollMode Ihrer Ansicht nach ScrollPerPixel Einstellung>

setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); 
+0

BartekR habe ich die Post mit der Lösung aktualisiert - oder so Ich denke zumindest. Guter Rat dort, und willkommen in der Gemeinschaft für user3794624. Zeit, das zu einem richtigen Benutzernamen zu ändern :-). –

+1

das hat mir tatsächlich geholfen, ein anderes Problem zu beheben: tableWidget scrollte viel zu schnell, das ist ... bis ich den Scroll-Modus änderte. Alle Einstellungen der QScrollerProperties waren nicht wirklich hilfreich –

Verwandte Themen