2011-07-13 7 views
2

У меня есть фрагмент кода в QML, который должен искать регулярное выражение «Вызов» в screen.text, и если он не найден, только после этого он изменяется screen.text.К сожалению, документация не ясна в QML/QString documentation.содержит (regexp) на том, что возможно Qstring/string в QML

Button{ 
     id: call 
     anchors.top: seven.bottom 
     anchors.left: seven.left 

     text: "Call" 
     width: 40 

     onClicked:{ 
      if(screen.text.toString().startsWith("Calling" , false)) 
       return; 
      else 
       screen.text = "Calling " + screen.text 
     } 
    } 

Ошибки я получаю:

file:///home/arnab/workspace/desktop/examples/cellphone.qml:127: TypeError: Result of expression 'screen.text.toString().startsWith' [undefined] is not a function.

ответ

3

Вы должны использовать Javascript-функции в обработчике:

 onClicked:{ 
     var patt = /^Calling/; 
     if(patt.test(screen.text)) 
      return; 
     else 
      screen.text = "Calling " + screen.text 
    } 
0

Поскольку функция "StartsWith" не является стандартной функцией.

не могу сказать, что если вы можете использовать прототипы в QML JS, но использовать этот код:

String.prototype.startsWith = function(str) 
{return (this.match("^"+str)==str)} 

или только

if(screen.text.toString().match("^Calling")==screen.text.toString())

больше прочитать здесь: http://www.tek-tips.com/faqs.cfm?fid=6620

0

Как и в двух других ответах: toString() дает строку JavaScript, а не QString, а строка JavaScript не содержит startsWith(). Используйте один из обходных решений.