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