如何在Qt5.5 qml TreeView中右键单击显示上下文菜单

时间:2015-09-08 03:08:34

标签: qt treeview qml qt-quick

我想在右键单击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)
    }

2 个答案:

答案 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)
            }
        }
    }
}