为了正确子类化QAbstractProxyView并使它与QListView之类的 View 一起工作,我必须做什么。到目前为止,我已经做到了:

class Proxy : public QAbstractProxyModel
{
    Q_OBJECT
public:
    explicit Proxy(QAbstractItemModel* source_model = 0, QObject *parent = 0);
    QModelIndex mapToSource(const QModelIndex & proxyIndex) const;
    QModelIndex mapFromSource(const QModelIndex & sourceIndex) const;
    virtual QModelIndex index(int row, int column,
                              const QModelIndex &parent = QModelIndex()) const;
     virtual QModelIndex parent(const QModelIndex &child) const;
    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
    virtual QVariant data(const QModelIndex&, int = Qt::DisplayRole) const;

signals:

public slots:

};

此类中的每个函数都在单独的cpp文件中实现。不幸的是,在我的Ui类中:
Proxy* p = new Proxy;
p->setSourceModel(model_);//model is of class Model
listView->setModel(p);

不起作用;来自模型的数据不会显示在listView中。

最佳答案

如果要与QListView一起使用,则应使模型继承自QAbstractListModel。您只需要实现三种方法:构造函数rowCountdata。另请参阅此帖子以获取更多信息:How to create a custom model for a QListView in Qt

10-08 13:33