我想在右键单击Qt5.5 qml TreeView项目时显示上下文菜单,但它已点击信号。右键单击如何显示上下文菜单?
TreeView {
id: tree_view
anchors.fill: parent
model: tree_model
headerVisible: false
backgroundVisible: false
TableViewColumn {
role: "display"
}
onClicked: {
console.log("clicked", index)
}
onDoubleClicked: isExpanded(index) ? collapse(index) : expand(index)
}
答案 0 :(得分:1)
您可以在某处定义菜单并使用popup
方法进行显示吗?该方法打开靠近鼠标光标的菜单,所以到正确的位置。
当然,您还必须定义itemDelegate
,并在需要时让事件流出您的项目(不要使用它)。
clicked
的{{1}}信号的文档明确地引用了委托代表来使用这些事件,所以我想这是预期的方法。
答案 1 :(得分:0)
实际上非常简单,只需将MouseArea配置为仅接受右键单击事件,它就不会干扰TreeView本身执行的鼠标处理:
TreeView {
id: tree_view
anchors.fill: parent
model: tree_model
TableViewColumn {
role: "display"
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
var index = parent.indexAt(mouse.x, mouse.y)
if (index.valid) {
console.log("show context menu for row: " + index.row)
}
}
}
}