博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qml文字滚动效果的封装,实现方式运用的qml中提供的动画效果,另一种实现方式也可以使用定时器修改控件的坐标来实现...
阅读量:6367 次
发布时间:2019-06-23

本文共 3415 字,大约阅读时间需要 11 分钟。

import QtQuick 2.0

Item {

    id:root
    width: visibleZone
    height: 32
   // color: "red"
    clip:true

    property int visibleZone:100

    property int srollingTime:3000

    property int fontSize: 50

    property int fontLetterSpace :3
    property int fontWordSpace:5

    property string fontColor: "black"

    property string hText: ""
    property int htextWidth: 0

    property int sentenceMargin:5

    property string  textobjectName:""

    property int disStyle:-1     // 0-left,1-middle,2-right

 /*******************methed 1 start*************************/

    Text {

        id: txtFirst
        objectName: textobjectName
        font.pixelSize: fontSize
        font.letterSpacing: fontLetterSpace
        font.wordSpacing: fontWordSpace
        color: fontColor
        onTextChanged: {
            if(root.disStyle===0)
            {
                txtFirst.x=0
            }
            else if(root.disStyle===1)
            {
                txtFirst.x=(root.visibleZone-txtFirst.width)*0.5
            }
            else
            {
               txtFirst.x=root.visibleZone-txtFirst.width
            }

            htextWidth=txtFirst.width

            txtSecond.text=txtFirst.text
            if(txtFirst.width>visibleZone)
            {
                anim.restart()
                txtSecond.visible=true
            }
            else
            {
                txtSecond.visible=false
                anim.stop()
            }
        }
    }

    Text {

        id: txtSecond
        font.pixelSize: fontSize
        font.letterSpacing: fontLetterSpace
        font.wordSpacing: fontWordSpace
        color:fontColor
        onTextChanged: {
            txtSecond.x=txtFirst.width+root.sentenceMargin
        }
    }

   ParallelAnimation{
       id:anim
       loops: Animation.Infinite

       SequentialAnimation{

           NumberAnimation{

               target:txtFirst
               property:"x"
               to: -txtFirst.width-root.sentenceMargin
               duration: (txtFirst.width+root.sentenceMargin) / root.visibleZone * root.srollingTime
           }

           NumberAnimation{

               target:txtFirst
               property:"x"
               to:  txtFirst.width+root.sentenceMargin
               duration: 1
           }

           NumberAnimation{

               target:txtFirst
               property:"x"
               to: 0
               duration: (txtFirst.width+root.sentenceMargin)/root.visibleZone * root.srollingTime
           }

       }

       SequentialAnimation{

               NumberAnimation {

                   target:txtSecond
                   property:"x"
                   to: -txtFirst.width-root.sentenceMargin
                   duration: (2 * txtSecond.width+2*root.sentenceMargin) / root.visibleZone * root.srollingTime
               }

               NumberAnimation{

                   target:txtSecond
                   property:"x"
                   to: txtSecond.width+root.sentenceMargin
                   duration: 1
               }
       }

   }

 

 

 

 /*******************methed 1 ended*************************/

 

 

 

 /*******************methed 2 start*************************/

    //    Timer {

//        id:mytimer
//             interval: srollingTime/100
//             running: false
//             repeat: true
//             onTriggered:{
//                 if(txtFirst.x<=-root.htextWidth-root.topleftX-root.sentenceMargin) txtFirst.x=root.topleftX+root.htextWidth+root.sentenceMargin
//                 txtFirst.x-=1
//                 if(txtSecond.x<-root.htextWidth) txtSecond.x=root.topleftX+root.htextWidth+root.sentenceMargin*2
//                 txtSecond.x-=1
//             }
//         }

//       Text {
//           id: txtFirst
//           objectName: textobjectName
//           x:root.topleftX
//           y:root.topleftY
//           font.pixelSize: fontSize
//           font.letterSpacing: fontLetterSpace
//           font.wordSpacing: fontWordSpace
//           color: fontColor
//           onWidthChanged: {
//               htextWidth=txtFirst.width
//               hText=txtFirst.text
//               if(htextWidth>visibleZone)
//               {
//                   txtSecond.x=root.topleftX+root.htextWidth+root.sentenceMargin
//                   txtSecond.visible=true
//                   mytimer.restart()
//               }
//               else
//               {
//                   mytimer.stop()
//                   txtFirst.x=root.topleftX
//                   txtSecond.visible=false
//               }
//           }
//       }

//       Text {

//           id: txtSecond
//           x:root.topleftX+root.htextWidth+root.sentenceMargin
//           y:root.topleftY
//           font.pixelSize: fontSize
//           font.letterSpacing: fontLetterSpace
//           font.wordSpacing: fontWordSpace
//           color:fontColor
//           text: hText
//       }

 

 /*******************methed 2 ended*************************/

}

 

转载于:https://my.oschina.net/urlove/blog/1806565

你可能感兴趣的文章
硬盘直接引导启动Manjaro Linux iso
查看>>
CodeSmith代码生成工具介绍
查看>>
几个常用且免费的接口
查看>>
jQuery文件上传插件 Uploadify更改错误提示的弹出框
查看>>
RHEL6下Apache与Tomcat整合
查看>>
Heartbeat+DRBD+MFS高可用
查看>>
要感谢那些曾经慢待你的人
查看>>
常见的global cache等待事件
查看>>
第 7 章 多主机管理 - 047 - 管理 Machine
查看>>
CentOS5和6的系统启动流程
查看>>
怎么看域客户端是否继承了组策略
查看>>
linux防止DDoS***
查看>>
6.4 Linked List 重做
查看>>
小米路由
查看>>
QT 学习 之 窗口拖拽 实现
查看>>
PHP的ftp文件,多文件上传操作类
查看>>
js中清空数组的方法
查看>>
python def说明
查看>>
Java根据IP获取国家省级地市信息
查看>>
自动安装系统及网络安装服务
查看>>