2011-11-30 71 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