2012-11-01 79 views
0

我们必须制作一个滑块组成的进度条,滑块按照下图所示的滑块进行颜色切换。计时器无法正常工作

Progress Bar

我想我的手在下面的逻辑,但不能得到预期的效果。任何帮助或建议如何实施相同。

下面是我的代码片段

import QtQuick 1.1 

Rectangle { 
    id: container 

    width: 500; height: 400 

    Row { 
     id:repeaterid 
     x: 75 
     y: 280 
     anchors.bottom: parent.bottom 
     anchors.bottomMargin: 114 
     spacing: 4 
     Repeater { 
      model: 50 
      Rectangle { 
       id: smallrect 
       color: "red" 
       width:4 
       height:4 
      } 
     } 
    } 

    Timer { 
     id: progressTimer 
     interval: 50 
     running: true 
     repeat: true 
     onTriggered: { 
      if (slider.x < 460) 
      { 
       slider.x += repeaterid.spacing + 4 
       smallrect.color = "green" 
      } 
     } 
    } 

    Rectangle { 
     id: slider 
     x: repeaterid.x 
     y: repeaterid.y 
     width: 6; height: 6 
     color: "blue" 
    } 
} 

我曾尝试使用ColorAnimation,但有任何运气。

回答

0

要访问中继器内的项目,您可以使用itemAt(索引号)函数。这将允许您更改中继器儿童的颜色。我还添加了indexCurrent属性以跟踪当前索引。

试试这个代码:

import QtQuick 1.1 

Rectangle { 
    id: container 

    width: 500; height: 400 

    property int indexCurrent: 0 

    Row { 
    id:repeaterid 
    x: 75 
    y: 280 
    anchors.bottom: parent.bottom 
    anchors.bottomMargin: 114 
    spacing: 4 
    Repeater { 
     id: repeater 
     model: 50 
     Rectangle { 
      id: smallrect 
      color: "red" 
      width:4 
      height:4 
     } 
    } 
    } 

    Timer { 
    id: progressTimer 
    interval: 50 
    running: true 
    repeat: true 
    onTriggered: { 
     if (slider.x < 460) 
     { 
      slider.x += repeaterid.spacing + 4 
      repeater.itemAt(indexCurrent).color = "green" 
      indexCurrent = indexCurrent + 1 
     } 
    } 
    } 

    Rectangle { 
    id: slider 
    x: repeaterid.x 
    y: repeaterid.y 
    width: 6; height: 6 
    color: "blue" 
    } 
} 
+0

一个解释将是美好的。 – UmNyobe

1

计时器工作正常。问题完全不同:您尝试访问onTriggerd处理程序中的smallrect,这是Repeater之外的未定义引用。尝试解决问题更具声明:

  • 使用在container整数属性,以进度条的当前位置
  • 存储smallrect使用该属性的值来设置颜色(index < position? "green": ...)
  • 使用Timer或更好的NumberAnimation来更新财产
  • 摆脱slider矩形的,只是给在Repeater右侧矩形蓝色
+0

感谢Sebasgo的建议,一定会实现它们。 – DNamto