2016-01-22 33 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; 
     } 
    } 
} 
相关问题