我有,例如,這樣的模式在我的QML:試圖從ListElement在ListModel的QML調用自定義功能
ListModel{
id: mainlist
ListElement
{
name: "Name1"
type: "subMenu"
toogle: false
iconSource: ""
function actionClick()
{
console.log("actionclick is passed for 0 item!")
}
}
ListElement
{
name: "Manage Favorites"
type: "subMenu"
toogle: false
iconSource: "image://provider/common/endless_menu/list_icons/fav"
function actionClick()
{
console.log("actionclick is passed for 1 item!")
}
}
ListElement
{
name: "Name2"
type: "subMenu"
toogle: false
iconSource: "image://provider/common/endless_menu/list_icons/active"
function actionClick()
{
console.log("actionclick is passed for 2 item!")
}
}
ListElement
{
name: "Name3"
type: "subMenu"
toogle: false
iconSource: "image://provider/common/endless_menu/list_icons/scan"
function actionClick()
{
console.log("actionclick is passed for 3 item!")
}
}
ListElement
{
name: "Manual Frequency Input"
type: "commonBtn"
toogle: false
iconSource: ""
function actionClick()
{
console.log("actionclick is passed for 4 item!")
}
}
function onStart(currIndex)
{
console.log("test is passed for " + currIndex + "item!")
}
}
所以,我有id: optionlist
控制列表元素的ListView元素,ListDelegate。 我有幾個模型 - 爲項目中的菜單選項創建的所有這些元素。 因此,列表文件中的代碼onModelChanged: optionlist.model.onStart()
完美工作。
問題是在MouseArea元素中從listDelegate腳本OnClicked
調用actionClick()
函數。是否有可能做到這一點? 類似這樣的:optionlist.model.ContentItem.children[currentIndex].actionClick()
也許還有別的?
UPDATE: 對不起,艾米特Tomer的,也許我不解釋任務正確......所以,我需要元素與未來域模型:
name: - text for element
type: - type of element (button, radio button, check button or submenu) - needed for corect action when user clicked on this item
toogle: - boolean value for radio/check buttons state, and for some internal operations.
iconSource: - path for icon, if it needed.
function actionClick() - function, which will be execute when user clicked on this item.
這一切都必須爲明確和容易實現填滿所有選項菜單樹。該菜單樹將被寫入單獨的文件中。
在下面的代碼我告訴工作模式:
Item{
id: menuoptions
property ListModel prev: manageFavorites
property bool root: true
//Main Menu
property alias mainlist: mainlist
ListModel{
id: mainlist
ListElement
{
name: "Band: "
type: "subMenu"
toggle: false
iconSource: ""
}
ListElement
{
name: "Manage Favorites"
type: "subMenu"
toggle: false
iconSource: "image://provider/common/endless_menu/list_icons/fav"
}
ListElement
{
name: "Show: "
type: "subMenu"
toggle: false
iconSource: "image://provider/common/endless_menu/list_icons/active"
}
ListElement
{
name: "Scan"
type: "subMenu"
toggle: false
iconSource: "image://provider/common/endless_menu/list_icons/scan"
}
ListElement
{
name: "Manual Frequency Input"
type: "commonBtn"
toggle: false
iconSource: ""
}
function actionClick(currIndex)
{
switch(currIndex)
{
case 0:
{
prev = mainlist
menuList.model = bandlist
break
}
case 1:
{
prev = mainlist
menuList.model = manageFavorites
break
}
case 2:
{
prev = mainlist
menuList.model = showlist
break
}
case 3:
{
console.log("Scan started")
mainlist.setProperty(3, "name", getScan())
break
}
case 4:
{
console.log("Speller for Manual Frequency Input open!")
break
}
}
}
function onStart()
{
console.log("root model loaded")
root = true
mainlist.setProperty(0, "name", "Band: " + getBand())
mainlist.setProperty(2, "name", "Show: " + getShow())
mainlist.setProperty(3, "name", getScan())
}
}
//First Lvl subMenu
property alias bandlist: bandlist
ListModel{
id: bandlist
... Analog menulist
}
property alias manageFavorites: manageFavorites
ListModel{
id: manageFavorites
... Analog menulist
}
property alias showlist: showlist
ListModel{
id: showlist
... Analog menulist
}
}
正如你看到的,我喜歡你說的寫的東西。沒關係,如果我找不到更好的解決方案。 Beter解決方案 - 刪除actionClick()一般函數,並將它的一部分(以塊爲單位的代碼)分別添加到ListElement。並在元素點擊時調用它。
我不知道如何從ListElement調用此函數。在WPF中,我只需創建自定義組件,即可重新使用ListElement,並且只需要所有組件!但我不知道QML是如何實現的。
我什麼都不清楚 - 請問。
更新:問題已解決。我的答案中的變體。謝謝大家。
我認爲它現在變得更加困惑:-( –
我什麼都不清楚 - 請問( – Corwin