我是Qt的新手,我想了解一些事情。 让我们说,我有一个字符串列表:
QStringList fruits;
fruits << << "Apple" << "Orange" << "Strawberry" << "Mango" << "Blackberry"
我有一个模特:
QStringListModel fruitModel;
fruitModel.setStringList(fruits);
此模型连接到ListView小部件:
QListView lw;
lw.setModel(&fruitsModel);
lw.show();
我得到了一个包含水果列表的ListView:
这很好,但我想要的是将这个列表编号(例如)
我所知道的是我可以对这些项目进行排序或过滤。但是,我可以使用模型更改数据的表示,而无需触及原始的StringList吗?
答案 0 :(得分:0)
您可以使用代理模型来更改要返回到视图的数据,尤其是Qt :: DisplayRole:
class EnumerateProxyModel : public QIdentityProxyModel
{
public:
explicit EnumerateProxyModel(QObject *parent = 0)
: QIdentityProxyModel(parent)
{
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {
if (role == Qt::DisplayRole) {
return QStringLiteral("%1. %2").arg(QString::number(index.row() + 1),
QIdentityProxyModel::data(index, Qt::DisplayRole).toString());
}
return QIdentityProxyModel::data(index, role);
}
};
然后在视图而不是原始模型上设置它:
QStringListModel fruitModel;
...
EnumerateProxyModel enumerateProxy;
enumerateProxy.setSourceModel(&fruitModel);
lw.setModel(&enumerateProxy);