2016-01-22 42 views
0
import QtQuick 2.0 
import QtQuick.Layouts 1.1 
import QtQuick.Controls 1.1 
import "../../shared" as Examples 

Item{ 
    Slider { 
    x: 0; 
    y: 0;   
    id: minSizeSlider; 
    value: 5.0; 
    minimumValue: 0.0; 
    maximumValue: 128.0 
    onValueChanged: { 
     if(value < maxSizeSlider.value) { 
      console.log("minValue:" + value); 
     } else { 
      value = maxSizeSlider.value; 
     } 
    } 
} 

Slider { 
    x:0; 
    y:100;   
    id: maxSizeSlider; 
    value: 50.0; 
    minimumValue: 0.0; 
    maximumValue: 128.0 
    onValueChanged: { 
     if(value > minSizeSlider.value) { 
      console.log("maxValue:" + value); 
     } else { 
      value = minSizeSlider.value; 
     } 
    } 
    } 
} 

引起類型錯誤代碼,當我運行此我得到:爲什麼低於QML

example.qml:54: TypeError: Cannot read property of null 

它看起來像行:

if(value < maxSizeSlider.value) 

的問題,特別是

maxSizeSlider.value 

似乎會導致錯誤。 示例按預期工作,唯一的問題是錯誤輸出

回答

1

當第一Slider被初始化,onValueChanged火災立即使用,因爲你設置的值(5.0)從缺省值不同(0)。那時,第二個Slider尚未加載,因此您無法訪問其值。 您可以通過排除該情況來排除錯誤:

Slider { 
    x: 0; 
    y: 0;   
    id: minSizeSlider; 
    property real defaultVal: 5.0 
    value: defaultVal; 
    minimumValue: 0.0; 
    maximumValue: 128.0 
    onValueChanged: { 
     if(value == defaultVal) { // <== default value, no need to check 
      return; 
     } 
     if(value < maxSizeSlider.value) { 
      console.log("minValue:" + value); 
     } else { 
      value = maxSizeSlider.value; 
     } 
    } 
} 
相關問題