如何在TableView中显示所选项目的上下文菜单

问题描述 投票:0回答:1

这是我现在在TableView中的位置:

TableView{
    model: testContext.list
    TableViewColumn{
        width: parent.width / 2
        title: "Name"
        delegate: Text {
            text: modelData.name
        }
    }
    TableViewColumn{
        width: parent.width / 2
        title: "Age"
        delegate: Text {
            text: modelData.age
        }
    }
    Keys.onDeletePressed: testContext.removeItem(currentRow)
    onClicked: {
        console.log(row)
    }

    Menu {
        id: contextMenu
        MenuItem {
            text: "Delete"
            onClicked: testContext.removeItem(currentRow)
        }
    }
}

当我选择一个项目并点击删除时,所选择的项目被删除,但是我还不能通过右键单击显示contextMenu并删除所选择的项目。 testContext.listQVector<QObject*>,有了ListView/GridView,我可以得到这样的内容:

ListView/GridView{
    id: listView
    anchors.fill: parent
    model: testContext.list
    //cellHeight:
    //cellWidth:

    delegate: Text{
        text: modelData.name + " " + modelData.age
        MouseArea {
            acceptedButtons: Qt.LeftButton | Qt.RightButton
            anchors.fill: parent
            onClicked: {
                listView.currentIndex = index
                listView.forceActiveFocus()
                if (mouse.button == Qt.RightButton)
                    contextMenu.popup()
            }
        }
    }

    Menu {
        id: contextMenu
        MenuItem {
            text: "Delete"
            onClicked: testContext.removeItem(listView.currentIndex)
        }
    }

    Keys.onDeletePressed: testContext.removeItem(listView.currentIndex)

    highlight: Rectangle {
        color: "lightgray"
        width: listView.width
    }
}

通过单击删除或使用contextMenu删除项目。

我尝试过在MouseArea之外的其他signal-handler中添加onClicked,但到目前为止还算不上运气!

qt qml tableview contextmenu
1个回答
1
投票

以下示例显示了如何使用上下文菜单(我没有使用QObject列表,因为在这种情况下该模型是不相关的,因此为了简化示例,请使用ListModel)

TableView
© www.soinside.com 2019 - 2024. All rights reserved.