2013-12-15 25 views
2

我有一個可拖動的ItemMouseAreaItemxy屬性在MouseAreaonReleased信號處理程序內更改。QML:如何等待組件因屬性更改而重新繪製?

Item { 
    id: item 
    x: 10 
    y: 10 
    width: parent.width; height: width 
    signal someSignal 
    MouseArea { 
     onReleased: { 
      /* change x and y properties of item */ 

      /* emit signal to do further event handling */ 
      item.someSignal();   
     } 
     drag.target: parent 
    } 
    ... 
} 

的問題是,該項目被重新定位(因爲在它的x和y屬性的改變)之前的信號處理程序被調用並且這使得GUI顯示被凍結,直到信號處理程序返回之後,該物品被重新定位到其正確的位置。

如何推遲信號處理程序的執行直到重新繪製項目?

回答

1

我googled'qml強制重繪',但沒有找到任何幫助。添加一個計時器可以繞過。

import QtQuick 2.0 

Rectangle { 
    width: 640; height: 480 

    Rectangle { 
     id: item 
     x: 10; Behavior on x {NumberAnimation{}} 
     y: 10; Behavior on y {NumberAnimation{}} 
     width: 100; height: width 
     color: "red" 
     signal someSignal 

     MouseArea { 
      anchors.fill: parent 
      onReleased: { 
       /* change x and y properties of item */ 
       item.x = 100 
       item.y = 100 
       /* emit signal to do further event handling */ 
//    item.someSignal() 
       timer.start() 
      } 
      drag.target: parent 
     } 
     Timer { 
      id: timer 
      onTriggered: item.someSignal(); 
     } 

     onSomeSignal: { 
      var a = 0 
      for (var i=0; i<999999999; i++) 
       a ++ 
      console.log("done") 
     } 
    } 
}