通过搜索或密钥通过QStandardItemModel检索QStandardItem

时间:2013-07-12 08:20:43

标签: c++ qt qstandarditemmodel

有没有办法为QStandardItemModel中的条目分配唯一键,以便我们可以检查是否存在该键。如果它存在,我们会得到相关的QstandardItem

更新

这是我想要做的。我的表中有3列,所以我有3 QStandardItem。 这是我正在使用的代码:

QStandardItem* item0 = new QStandardItem("Column1");
QStandardItem* item1 = new QStandardItem("Column2");
QStandardItem* item2 = new QStandardItem("Column3");

现在我的模型被称为model,我将这些附加到我的模型

moddel->setItem(0,0,item0);
moddel->setItem(0,1,item1);
moddel->setItem(0,2,item2);

我需要为行分配一些唯一键,以便我可以检查该键的模型,模型将返回行号。任何建议。

2 个答案:

答案 0 :(得分:2)

您可以使用QStandardItem #define MyRole Qt::UserRole + 2 myItem->setData(Qvariant(key), MyRole) 函数来为用户定义的角色设置自定义键,例如

QVariant d = mymodel->data(anindex, MyRole)

您可以使用setData调用获取模型中任何索引的数据。

{{1}}

编写一个检查密钥是否存在的函数应该是直接的。

答案 1 :(得分:1)

pnezis的答案解决了密钥的存储问题,但没有解决模型中QStandardItem的访问问题。我通过子类QStandardItem解决了使用QStandardItem存储数据的问题,因为我需要存储大量复杂数据。

要从模型中获取QStandardItem,您需要使用行/列创建QModelIndex实例,然后调用itemFromIndex(index) 在模型上。

我的例子来自选择回调。

QModelIndex& selectedItem = itemsSelected.front();
QStandardItemModel* model = reinterpret_cast<QStandardItemModel*>(tableView->model());
if (nullptr == model)
    return;
QStandardItem *item = model->itemFromIndex(selectedItem);
if (nullptr == item)
    return ;