Sinais e slots do ListView para elementos de menu
Estou tentando implementar algum tipo de menu personalizado com elementos personalizados. O objetivo final é criar algum tipo de menu pop-up com texto e ícones. Mas durante a criação eu enfrentei alguns problemas. Eu posso mostrar 2 problemas principais:
Há um elemento de menu estranho com o títuloHello world
na primeira posição (parece que é o título lido da janela do aplicativo):De vez em quando eu estou recebendo erros comoqrc:/BreezeQuickMenu.qml:45: TypeError: Property 'clicked' of object QQuickListView(0x1120830) is not a function
Aqui está o meu código real:
main.qml
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.2
ApplicationWindow {
title: qsTr("Hello World")
width: Screen.width
height: Screen.height
visible: true
id: win
color: brPalette.normalBackground
BreezeQuickMenu{
id: brMenu
x: 490
y: 199
width: 128
height: 256
palette: brPalette
menuFont.pointSize: 16
BreezeQuickMenuItem{
title: "Item 1"
onClicked: mbox.show()
}
BreezeQuickMenuItem{
title: "Item 2"
}
BreezeQuickMenuItem{
title: "Item 3"
}
}
}
BreezeQuickMenu.qml
import QtQuick 2.4
Item {
id: root
property BreezeQuickPalette palette: BreezeQuickPalette
property alias currentIndex: menuList.currentIndex
property font menuFont
property bool menuVisible: false
implicitWidth: 128
implicitHeight: menuList.height
ListView{
id: menuList
anchors.fill: parent
model: root.children
clip: true
delegate: Component {
id: menuItem
Rectangle {
id: menuElement
property bool isCurrentItem: ListView.isCurrentItem
anchors {
left: parent.left
right: parent.right
}
color: palette.normalBackground
height: menuText.font.pixelSize*1.2
Text {
id: menuText
anchors.fill: parent
text: title
color: palette.normalText
font: menuFont
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onClicked: {
menuList.currentIndex = index
menuList.model[index].clicked()
}
}
}
}
}
}
BreezeQuickMenuItem.qml
import QtQuick 2.4
Item {
id: root
property string title: "Menu Element"
signal clicked
}
Como você pode ver, estou tentando implementar a lista e os itens de menu com seus próprios sinais. Eu tenho 2 perguntas:
como posso me livrar do uso da propriedade title do elemento pai, pois preciso ler a propriedade title das crianças
qual é a abordagem correta do uso de sinais e slots nos elementos do menu para evitar erros acima?
Por favor me ajude a entender. O projeto completo pode ser obtido aqui:
git clone git://git.code.sf.net/p/breezequick/code breezequick-code