2017-09-14 71 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