2017-09-14 62 views
0

我在QMLRepeater模型可以执行JAVASCRIPT吗?

XmlListModel { 
id: model 
source: "qrc:/Config/myConfig.xml" 
query: "/levels/level" 
XmlRole { name: "levName"; query: "@levName/string()" } 
XmlRole { name: "from"; query: "from/number()" } 
XmlRole { name: "to"; query: "to/number()" } 
} 

的XmlListModel读取这个XML文件

<levels parId = "3"> 
<level levelName = "level1"> 
    <from>0</from> 
    <to>1</to 
</level> 
<level levelName = "level2"> 
    <from>1</from> 
    <to>2</to> 
</level> 
</levels> 

我也有一个文本元素:

Text { 
    id: myText 
    x: 0; y:0 
    text: "" 
} 

我需要通过XmlListModel以迭代根据我在myList.get(3).value中发现的情况分配到myText.text的权限级别,其中myListListModel

实施例:
如果myList.get(3).value0之间(含)并1(除外)我必须设置myText.text = "level1",如果是1(附带)和2(除外)之间我必须设置myText.text = "level2",等等。 ..

有什么建议吗?

+1

我真的不知道'XmlListModel',ListModel和'Repeater'可能在哪里......但是你可以在'text'属性的绑定中使用JavaScript,如下所示: 'text:“level”+(Math.floor(myList.get(3).value)+ 1)' – derM

+0

我需要XmlListModel,因为我不想直接显示参数的值,但它的相应级别(我在XML文件中找到)。所以你提供的解决方案并不适合我...... – Elena

+1

“myText.text”的值是什么?关于你的XML文件,你可以确定什么东西(比如:是从'''''始终'''appart,总是类型为'int'?它们是否正确?它们是否连续?因此我可以当然,'model.get(n)'给我的范围从'n'到'n + 1'的条目? – derM

回答

0

不幸的是,你不能在O(1)give me the value, where x is between role from and role to查询您的XmlListModel。

对你有好处,你有一个有序的列表,所以你可以在你的XmlListModel上执行二进制搜索。该算法基本上是这样的:

您首先检查您的搜索值是否与巧克力中间的巧合。如果它较小,则在下半部分搜索,如果它较大,则搜索上半部分......等等。
有了这个,您可以在O(log n)中找到您的值,其中n是您的XmlListModel中的条目数。
https://en.wikipedia.org/wiki/Binary_search_algorithm

如果您在本实施,对你的模型工作 - 无论是在JavaScript或C++或Python ......你可以把它像这样:

Text { 
    text: binarySearch(model, myList.get(3).value).levName 
} 

当你实现这个算法,确保处理差距。

+0

非常感谢你的建议:-))) – Elena

相关问题