zoukankan      html  css  js  c++  java
  • qml 音乐播放器的进度条

    进度条采用qml的Slider组件

    样式什么的,网上很多。我就不列举了。接下来主要说明,进度条是怎样按秒移动的。

       Slider {

                      id: control

           value: 0

           stepSize: 0.01
           onValueChanged: {
                   txt_time_start.text =formation(control.value)
                   txt_time_end.text = formation(maximumValue);
              }
    }
    //timer启动
       Timer{
            id:time
            running: false
            repeat: true
           // interval: 500
            onTriggered:{
                control.value = control.value + control.stepSize 
          }
        }
    //取得小数点后两位
         function splitAndRound(num) {
           num = num * Math.pow(10, 2);
            return (Math.round(num)) / (Math.pow(10, 0));
        }
    //歌曲的格式都是00:00 为了保持格式因为补0
    function formation(controlvalue)
            {
                //补0
                  function pad(num, n) {
                      var len = num.toString().length;
                      while(len < n) {
                          num = "0" + num;
                          len++;
                      }
                      return num;
                  }
                var min = Math.floor(splitAndRound(controlvalue)/60)
                var sec = splitAndRound(controlvalue)%60
                return(pad(min,2) + ":" + pad(sec,2))
            }
    还没有搞清楚的是slider属性。在1.4版本里有maximumValue,minimumValue属性来改变滑块的最大值与最小值。
    到了2.3版本变成了from与to。共同点value还是0至1之间的小数。我这里用的是2.3版本。

    C++实现播放进度的小算法
    1)更新控件的主函数
    string updateSliderText(int changevalue)
    {
        double min = 0;
        double sec = 0;
        double tempValue = 0;
        string outputstring = "";
        tempValue = double(changevalue);
        min = floor(tempValue/60);
        sec = changevalue%60;
    
        outputstring = pad(min,2) + ":"+ pad(sec,2);
        return outputstring;
    }

    2)规范歌曲格式

    string pad(int num,int n)
    {
        string output_string ="00";
        int len = 0;
        string s = "";
        len = get_length(num);
        s = to_String(num);
        while(len < n)
        {    
            s = "0" + s;
            len++;
        }
        
        
        return s;
    }
    int get_length(int x)
    {
        int leng=0;
        while(x)
        {
            x/=10;
            leng++;
        }
        return leng;
    
    }
    string to_String(int n)
    {
          int m = n;
         char s[100];
         char ss[100];
         int i=0,j=0;
         if (n < 0)// 处理负数
         {
             m = 0 - m;
             j = 1;
             ss[0] = '-';
         }    
         while (m>0)
         {
             s[i++] = m % 10 + '0';
             m /= 10;
         }
         s[i] = '';
         i = i - 1;
         while (i >= 0)
         {
             ss[j++] = s[i--];
         }    
         ss[j] = '';    
         return ss;
     }

    想法比较粗糙。。。如果有C++11的话,to_string函数就不用自己写了。。。。

  • 相关阅读:
    uniapp 小程序全屏的实现
    element select失效问题 , vue刷新的两种方式
    正则表达式
    vue+element ui中select组件选择失效问题原因与解决方法
    java removeAll和重写equals、hashcode引起的性能问题
    hive sql取差集
    hive获取日期对应的星期
    Hive分组后取组内排名方法row_number
    用Apache Spark和TensorFlow进行的深度学习
    git从已有分支拉新分支开发
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9155551.html
Copyright © 2011-2022 走看看