0

元素.qml

Item{
    property int step
    property int minValue
    property int maxValue
    property int value  //should accept values of form i*step+minValue
}

main.qml

Element{
    step:2
    minValue:-7
    maxValue:7
    value:0  //not an acceptable  value(2*i-7), should convert to 1 or -1
}

如果我设置了值,它应该将值转换为最近step*i+minValue,即01然后发出valueChanged()

我希望valueChanged()仅在其值为 时才发出信号step*i+minValue

4

2 回答 2

1

您无法进行预测试,并且将在其上发送 valueChanged 信号。唯一的解决方案是在 onValueChanged 插槽中进行测试并发送自定义信号,您最不发送 valueChanged() 信号,因为它已连接到 onValueChanged 插槽。

import QtQuick 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2

Item{
    property int step :2
    property int minValue :-7
    property int maxValue: 7
    property int value: 0  //should accept values of form i*step+minValue

    signal sgnValueChanged(int value)

    Column{

        TextInput{
            id:input
            width: 100
            height: 20
        }

        Rectangle{
            id:button
            width: 100
            height: 20
            color:"#f0ffff"
            MouseArea{
                anchors.fill:parent
                onClicked:
                {
                    value = parseInt(input.text)

                }
            }
        }
    }

    onValueChanged:
    {
        if(value >= minValue && value <= maxValue)
        {
            sgnValueChanged(step * value + minValue)
        }

        else
        {
            console.log("not acceptable value")
        }
    }
}
于 2015-07-12T02:47:22.500 回答
0

据我所知,没有办法设置属性验证器。一种可能的解决方法如下所示。例如,考虑一个只接受正数的属性。这样的属性可以编码如下:

Item {
    property int value: 0
    property int _value: 0
    on_ValueChanged: {
        if(_value > 0)
            value = _value;
    }
}

Item如果是您的自定义类,则可以在 C++ 中使用相同的方法。

于 2015-07-10T13:06:14.673 回答