2013-07-30 2 views
0

Есть ли способ сделать пользовательское свойство, требуемое в QML? Например, что-то вроде:QML - требуемое настраиваемое свойство

property required int numRows 

Я хочу, чтобы обеспечить соблюдение, что пользователь компонента проходит определенное свойство, потому что компонент не будет работать без него.

+1

Путь 'Qt' предназначен для того, чтобы компонент не отображал и не выводил предупреждение с помощью' qWarning() 'или выводил предупреждение внутри самого компонента. – user1095108

ответ

2

нет, не можете. Самый надежный способ - просто присвоить правилу значение по умолчанию.

обходной путь может быть, чтобы дать недопустимое значение (например, -1) и проверьте значение в слоте Component.onCompleted вашего пункта и показать console.log если свойство не действует ...

но предпочитают первый способ, компонент всегда должен использоваться со значениями по умолчанию, для целей повторного использования!

0

Qt trolls сказали себе, что Component.onCompleted не является предпочтительным способом делать большинство вещей, но хак должен был реализоваться.

Наилучшей является использование содействующего декларативного стиля, что-то вроде этого было бы идеально:

MyItem{ 
    property int myvalue: -1 
    enabled: myvalue != -1 // Use other number if neccesary 
} 

Это будет работать для включения интерактивных элементов, но более интересные вещи могут быть сделаны как:

MyItem{ 
    property int myvalue: -1 
    onMyvalueChanged:{ 
     enabled = true 
     callMyInitFunction(something) 
    } 
} 

Это будет срабатывать, когда пользователь изменит значение, затем вы можете вызывать другие функции или инициализаторы. Если вы хотите инициализировать только один раз, вы можете проверить, отключен ли он.

MyItem{ 
    property int myvalue: -1 
    onMyvalueChanged:{ 
     if (!enabled){ 
     enabled = true 
     callMyInitFunction(something) 
     return 
     } 
     // Stuff to do of already initialized 
     callOtherStuff(otherThing) 
    } 
} 

Наконец, читая слова, которые вы написали «проходит определенное свойство», кажется, вы могли бы вместо того, чтобы создать яваскрипт функцию для объекта и его вызова.

MyItem{ 
property int _myprop: 0 
function launch(param1, param2, param3){ 
    _myprop = param3 
    // do stuff 
    } 
} 

Тогда вы могли бы назвать его, запустив его, а не создавать его, это может работать для многоразового диалога, зависит от вашего использования.

Конечно, есть несколько способов сделать что-то в зависимости от того, что вам нужно.

Смежные вопросы