Qt 5.6 wprowadza nowe kontrole jako podgląd techniczny „Qt Labs Sterowanie”. Sterowanie wprowadza między innymi wbudowany typ (interaktywny) typu ScrollBar
i ScrollIndicator
(nie interaktywny).
W Qt 5,7 nowych elementów sterujących zakończyło podgląd techniczny i obecnie nosi nazwę "Quick Controls 2", aby podkreślić fakt, że zostały one zastąpione poprzednimi kontrolkami.
Jeśli używasz Qt 5.6, która to wersja LTS i wyniesie około dość kiedyś, ScrollBar
mogą być wykorzystane w następujący sposób:
import QtQuick 2.6
import Qt.labs.controls 1.0
import QtQuick.Window 2.2
ApplicationWindow {
visible: true
width: 400
height: 600
Flickable {
anchors.fill: parent
contentWidth: image.width
contentHeight: image.height
//ScrollIndicator.vertical: ScrollIndicator { } // uncomment to test
ScrollBar.vertical: ScrollBar { }
ScrollBar.horizontal: ScrollBar { }
Image {
id: image
source: "http://i.ytimg.com/vi/tntOCGkgt98/maxresdefault.jpg"
}
}
}
Natomiast w Qt 5.7 i nowsze można użyć ScrollBar
lub ScrollIndicator
w następujący sposób:
import QtQuick 2.6
import QtQuick.Controls 2.0
import QtQuick.Window 2.2
ApplicationWindow {
visible: true
width: 600
height: 300
Flickable {
anchors.fill: parent
contentWidth: image.width
contentHeight: image.height
ScrollIndicator.vertical: ScrollIndicator { }
//ScrollBar.vertical: ScrollBar { } // uncomment to test
Image {
id: image
source: "http://s-media-cache-ak0.pinimg.com/736x/92/9d/3d/929d3d9f76f406b5ac6020323d2d32dc.jpg"
}
}
}
składnia Wykorzystanie jest prawie taka sama, natomiast głównym refaktoring wystąpił w kodzie stylizacji jak widać np Labs Controls ScrollIndicator
customization page w porównaniu do Quick Controls 2 ScrollIndicator
customization page.
+1 za odpowiedź :) –
Dziękuję bardzo! Bardzo elastyczne i wydajne rozwiązanie. Brakuje tylko orientacji poziomej.Ponieważ ListView obsługuje to, dodam powiązanie właściwości, aby przewijać poziomo. –
Jeśli mamy interaktywną zmianę liczby delegatów, wykryto pętlę wiązania: 'Wiązanie { target: flickable; własność: "contentY"; wartość: (handle.y * (flickable.contentHeight - flickable.height)/clicker.drag.maximumY); , gdy: (clicker.drag.active || clicker.pressed); } ' I wtedy całe przewijanie zostaje przerwane. Możemy przewinąć ojca, a następnie contentHeight. Czy możesz, proszę, pomóc w tym? – VALOD9