QML (плазмоид KDE): Не удается получить плавную прокрутку текста для соответствующего цикла

#qml #qt5 #kde #kde-plasma #plasmoid

Вопрос:

Я работаю над плазмоидом для плазмы KDE и не могу понять, как реализовать полосу прокрутки заголовка, аналогичную тем, которые вы видите внизу экрана на новостных каналах. Я хочу иметь строку текста, которая горизонтально прокручивается внутри цветного прямоугольника с фиксированной скоростью, зацикливаясь навсегда и плавно начиная сначала, как только она достигнет конца. Я разобрался в основной части циклического перехода, позволяя тексту выходить за пределы своего поля, а затем выходить с другого конца:

 Rectangle {
    width: myItem.width
    height: myItem.height
    color: myColor

    Text {
        width: myItem.width
        wrapMode: "NoWrap"
        maximumLineCount: 1
        color: theme.textColor
        text: "Whatever goes here."

        SequentialAnimation on x {
            running: true
            loops: Animation.Infinite
            NumberAnimation { from: -myItem.width; to: myItem.width; duration: 1000; easing.type: Easing.InOutQuad }
            PauseAnimation { duration: 250 }
        }
    }
}
 

Но это не учитывает длину текстовой строки, чтобы настроить начальную / конечную позицию и длительность до ее реальной ширины. Это также требует перемещения текста полностью за пределы, а затем обратно, оставляя поле пустым для одного кадра… Интересно, есть ли способ сделать это соединение плавным. Он также не замечает, когда я изменяю размер плазмоида и адаптирую диапазон анимации, учитывается только масштаб, обнаруженный в начале. Как вы предлагаете переделать это определение, чтобы обойти проблемы с масштабированием и получить согласованные результаты при любом размере поля и длине текста?

Комментарии:

1. Достигнут некоторый ограниченный прогресс: я, по-видимому, могу извлечь реальную ширину строки с помощью TextMetrics и использовать ее в анимации прокрутки. Апплет по-прежнему не настраивается при изменении размера, и это не помогает плавно выполнять текстовый цикл без промежутка между ними.