我有一個關於QAbstractTableModel
的基礎數據源的實現的一般問題。使用QAbstractTableModel實現與自定義類的QList
QAbstractTableModel::data()
函數通過由行和列值組成的索引訪問數據源內容。
如果我的基礎數據源是Person
類的QList
,其中每個成員都代表一列,那麼如何使用給定的列索引訪問其成員?
我能想到的唯一辦法是,我用一種映射,這列編號映射到Person
類的成員:
QVariant TableModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
{
Person person = mySource[index.row()];
if (index.column() == 0)
return person.getName();
else if (index.column() == 1)
return person.getAdress();
(...and so on..)
}
return QVariant();
}
是這種方法來解決這個問題,或者是有更好的嗎?如果我的班級有50名成員,那麼很多工作要做。當我通過QAbstractTableModel::setData()
向源寫入數據時,必須完成同樣的事情。
有助於我理解Qt模型/視圖實現的這部分內容的答案或鏈接非常感興趣。