2015-07-10 3 views
0

Element.qmlКак проверить значение свойства 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, т.е. 0 к 1, а затем излучают valueChanged().

Я хочу, чтобы сигнал valueChanged() испускался только тогда, когда его значение равно step*i+minValue.

ответ

0

Насколько я знаю, нет способа установить средство проверки свойств. Возможное обходное решение показано ниже. Рассмотрим, например, свойство, которое принимает только положительные числа. Такое свойство может быть закодирован следующим образом:

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

Такой же подход может быть использован в C++, если Item ваш пользовательский класс.

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") 
     } 
    } 
} 
Смежные вопросы