2011-11-30 72 views
0

爲了正確地繼承QAbstractProxyView類並使其與視圖(如QListView)一起工作,我需要做些什麼。到目前爲止,我這樣做:如何正確地繼承子類並插入視圖QAbstractProxyModel

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: 

}; 

每functionin這個類是在單獨cpp文件中實現。不幸的是在我的Ui類中做:

Proxy* p = new Proxy; 
p->setSourceModel(model_);//model is of class Model 
listView->setModel(p); 

不起作用;來自模型的數據不會顯示在listView中。

+0

你試過了什麼?你是否放了一些'qDebug'語句來檢查像'data'或'index'這樣的函數是否被調用? –

+0

@Laurent是的,我確實把qDebug語句和代理的這些方法不調用。這是怎麼回事? – user336359

回答

2

如果它的目的是使用QListView,你應該讓你的模型繼承QAbstractListModel。您只需實施三種方法:構造函數rowCountdata。另請參閱此帖以獲取更多信息:How to create a custom model for a QListView in Qt

+0

它也是用於QTreeView和QTableView。 – user336359