Qt:识别QTreeView的项目

时间:2016-10-07 12:42:00

标签: c++ qt model-view-controller treeview

示例树视图:

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存在,但没有答案。因此,我想了解在这样的应用程序中识别树视图项的可能方法的任何帮助。

1 个答案:

答案 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方法获取项目类型。

请参阅: