如何在 TableView 中的选定项目上显示上下文菜单
Posted
技术标签:
【中文标题】如何在 TableView 中的选定项目上显示上下文菜单【英文标题】:How to display contextmenu on selected item in TableView 【发布时间】:2020-01-21 17:17:25 【问题描述】:这是我现在在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<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
通过点击Delete或使用contextMenu
来删除项目。
我尝试在onClicked
和TableView
内部添加MouseArea
,在其他signal-handler
中添加一个TableView
,但到目前为止没有运气!
【问题讨论】:
【参考方案1】:以下示例显示了如何使用上下文菜单(我没有使用 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)
【讨论】:
以上是关于如何在 TableView 中的选定项目上显示上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章
iPhone SDK如何将tableview中plist中的选定行传递到UIViewController
如何在前一个 tableview 控制器的 detailtext 标签中显示选定的选择器日期