Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在TableView中显示选定项的上下文菜单_Qt_Qml_Tableview_Contextmenu - Fatal编程技术网

Qt 如何在TableView中显示选定项的上下文菜单

Qt 如何在TableView中显示选定项的上下文菜单,qt,qml,tableview,contextmenu,Qt,Qml,Tableview,Contextmenu,以下是我现在在TableView中看到的内容: TableView{ model: testContext.list TableViewColumn{ width: parent.width / 2 title: "Name" delegate: Text { text: modelData.name } } TableViewColumn{ width: pa

以下是我现在在
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)
        }
    }
}
当我选择一个项目并点击Delete(删除)时,所选项目会被删除,但我还无法在右键单击并删除所选项目时显示
contextMenu
testContext.list
是一个
QVector
,在
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
    }
}
通过点击delete或使用
contextMenu
删除项目


我尝试过在一些其他的
信号处理程序中添加
MouseArea
,除了
onClicked
,在
TableView
中添加
MouseArea
,但到目前为止没有成功

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

import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 1.4 as QQC1
import QtQuick.Controls 2.14 as QQC2

Window {
    id: root
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    ListModel {
        id: libraryModel
        ListElement {
            title: "A Masterpiece"
            author: "Gabriel"
        }
        ListElement {
            title: "Brilliance"
            author: "Jens"
        }
        ListElement {
            title: "Outstanding"
            author: "Frederik"
        }
    }
    QQC1.TableView {
        id: tableview
        x:100
        y:100
        width: 400
        height: 400
        model: libraryModel
        QQC1.TableViewColumn {
            role: "title"
            title: "Title"
            width: 100
        }
        QQC1.TableViewColumn {
            role: "author"
            title: "Author"
            width: 200
        }
        MouseArea{
            anchors.fill: parent
            propagateComposedEvents: true
            acceptedButtons: Qt.RightButton
            onClicked:  {
                var row = tableview.rowAt(mouseX, mouseY)
                if(row >= 0){
                    console.log(row)
                    tableview.currentRow = row
                    tableview.selection.clear()
                    tableview.selection.select(row, row)
                    contextMenu.popup()
                }
            }
        }
    }
    QQC2.Menu {
        id: contextMenu
        QQC2.MenuItem {
            text: "Delete"
            onClicked: libraryModel.remove(tableview.currentRow)
        }
    }
}