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函数就不用自己写了。。。。

原文地址:https://www.cnblogs.com/wxmwanggood/p/9155551.html