【发布时间】:2020-07-08 01:41:57
【问题描述】:
我按照本指南Creating a cusotm model for a QListView 创建了一个自定义列表模型。我可以显示自定义对象列表(例如示例中的 Employee),但我不知道如何取回所选对象(我可以直接取回“链接”对象吗?)。
也许我必须用这个命令做点什么:
myLV->selectionModel()->selectedIndexes();
但我真的不知道如何取回原始自定义对象。
[编辑]
到目前为止,我已经解决了在我的自定义列表模型中添加自定义方法来检索对象:
Employee* MyEmployeeListModel::getAtSelectedIndex(const QModelIndex& index){
return employees_.at(index.row());
}
然后在主窗口调用这个:
QModelIndexList selectedRows;
QItemSelectionModel * selmodel = ui->employeesLV->selectionModel();
selectedRows = selmodel->selectedRows();
MyEmployeeListModel* currModel = dynamic_cast <MyEmployeeListModel*>(ui->employeesLV->model());
for (const QModelIndex & index : selectedRows){
Employee* item=currModel->getAtSelectedIndex(index);
if (item) {
// do something with the item
}
}
现在我想知道这是否是真正的最佳实践。
【问题讨论】:
-
你能给那些对象举个例子吗?您可以通过自定义角色或整个对象传递一个 id。 (需要 Q_DECLARE_METATYPE/qRegisterMetatype())
-
考虑一个带有 id、name 和 surname 的简单员工类。在列表中,我的代码与我链接的示例完全相同。列表显示姓氏。 When selected a list of employees, I would liek to retrieve back the whole information for each selected employee.