我试图识别我的QListView项目模型中的对象。我目前正在使用列表视图的文本字段,这显然不是最好的主意。
这是我填充小部件的最小代码,看看我如何将时间戳保存到文本字段:
QListView * view = new QListView(this);
QStandardItemModel * model = new QStandardItemModel(this);
MyElements * mylist = getElements();
while (!mylist->isFirst())
{
QStandardItem * item = new QStandardItem(mylist->getIcon(), mylist->getTimeString());
model->appendRow(item);
mylist = mylist->getPrevious();
}
view->setModel(model);
可以看到,每个item
都有一个唯一的时间戳,将unix时间(以毫秒为单位)存储为字符串。我可以用它来识别我的对象,这样我就可以确定哪个项目被点击了。
现在,我希望用一个更用户友好的字符串覆盖文本,如"单击这个做事情",不再显示时间戳。
但是我仍然需要时间戳来标识列表中的每个唯一项。你知道我还能把这些数据存哪儿吗?
您可以使用QStandardItem::setData()函数为条目设置任何类型的数据。例如:
QStandardItem * item = new QStandardItem(list->getIcon(), "some text");
item->setData(list->getTimeString());
// ...
为了得到这些数据,你需要:
QString d = item->data().toString();
您可以使用Qt::UserRole使用自定义角色在一个项目中存储多个数据集。