示例树视图:
1. a
1.1. b
1.1.1. c
我想知道如何让我的代码识别我右键单击a或b或c。我能够创建一个TreeView,向其添加abc,并在右键单击位置获取该项目,但我不知道如何识别该项目,因此右键单击会创建不同的上下文菜单,关于单击的项目。我使用标准项目模型(QStandardItemModel
),到目前为止我得到的是:
void MyWindow::make_tree_custom_menu(const QPoint& pos){
QModelIndex index = treeView->indexAt(pos);
int itemRow = index.row();
int itemCol = index.column();
QStandardItem* itemAtPos = model->item(itemRow, itemCol);
itemAtPos->setText("meh");
}
我知道使用QTreeWidgetItem
你可以QTreeWidgetItem* newitem = new QTreeWidgetItem(name, itemtype);
,但据我在文档中看到,QStandardItem
没有这样的构造函数。另外,我知道this存在,但没有答案。因此,我想了解在这样的应用程序中识别树视图项的可能方法的任何帮助。
答案 0 :(得分:1)
首先,我建议在这种情况下使用QStandardItemModel::itemFromIndex(const QModelIndex & index)
方法获取项目。 QStandardItemModel::item(int row, int column)
方法没有parent参数,所以我认为它只返回顶级项(此方法适用于列表或表)。
然后,当您获得该项目时,您将拥有指向您已创建项目的指针,因此您只需要识别它。如果要为项目设置属性以定义类型(例如QTreeWidgetItem
itemType
),则可以使用QStandardItem::setData(const QVariant & value, int role)
方法(例如使用Qt::UserRole
)创建项目。然后,您可以使用QStandardItem::data(int role)
方法中的make_tree_custom_menu
方法获取项目类型。
请参阅: