В QML TestCase я пытаюсь настроить автоматическую c прокрутку ListView, который содержится внутри Flickable (чтобы добавить пользовательский нижний колонтитул, который можно щелкнуть в представлении, чего не произойдет, если просто * 1001) *)
Однако mouseDrag
только щелкает правильную координату, но не перетаскивает ее в каком-либо направлении. Вот упрощенная версия, максимально приближенная к реальной:
Practice.qml
import QtQuick 2.5
FocusScope {
width: 1920
height: 1080
Flickable {
objectName: 'flickableList'
boundsBehavior: Flickable.StopAtBounds
clip: true
width: parent.width
height: 240
contentHeight: 500
ListView {
interactive: false
height: parent.height
width: parent.width
model: ['example1', 'example2', 'example3', 'example4', 'example5']
delegate: Item {
width: 300
height: 100
Text {
text: modelData
}
}
}
}
Item {
id: footer
height: 100
width: parent.width
}
}
TheTest.qml
// The relevant part
var theList = findChild(getView(), 'flickableList')
var startY = 220
var endY = 20
mouseDrag(theList, 100, startY, 100, endY, Qt.LeftButton, Qt.NoModifier, 100)
Итак, когда я просматриваю тестовый пользовательский интерфейс, я вижу, что он четко щелкает по нужному делегату (в реальной реализации он выделен фокусом), ie. третий элемент "example3", который начинается с Y 200 и заканчивается Y 300). Но событие перетаскивания никогда не происходит. На экране ничего не движется, и compare(theList.contentY, 200)
говорит, что он все еще находится в позиции 0
. Я ожидал бы, что он будет на 200
, поскольку мышь должна mouseDrag
двигаться из положения 220
в 20
, ie. прокрутить список вниз на 200
. И 220
также находится в пределах видимой высоты (240
).
Просто чтобы быть уверенным, я также изменил значения Y, но также не двигался:
var theList = findChild(getView(), 'flickableList')
var startY = 20
var endY = 220
mouseDrag(theList, 100, startY, 100, endY, Qt.LeftButton, Qt.NoModifier, 100)
Также, так как на 3-й элемент явно нажимается (он выделяется), переданный элемент theList
(= Flickable) должен быть действительным.
Edit: Да, и это прокручивает список, но он идет вплоть до самого конца списка (388 пикселей вниз в реальной реализации, даже если дельта составляет всего 30 пикселей):
mousePress(theList, startX, startY)
mouseMove(theList, endX, endY)
mouseRelease(theList, endX, endY)
Итак, вопрос:
mouseDrag
работает только для определенных типов c компонентов (ie. Не работает на Flickable
?) Или что-то не хватает? Как я могу получить его, чтобы прокрутить список вниз? Спасибо!