1
我已经创建了代理模型,通过继承QAbstractProxyModel并将其作为模型连接到我的视图。我还为此代理模型设置了源模型。不幸的是有些事情是错误的,因为我没有得到任何显示在我的listView上的东西(当我的模型提供了一个模型来查看,但是当我提供这个代理模型时,它不起作用)。下面是我的一些代码片段:使用代理模型
#ifndef FILES_PROXY_MODEL_H
#define FILES_PROXY_MODEL_H
#include <QAbstractProxyModel>
#include "File_List_Model.h"
class File_Proxy_Model: public QAbstractProxyModel
{
public:
explicit File_Proxy_Model(File_List_Model* source_model)
{
setSourceModel(source_model);
}
virtual QModelIndex mapFromSource(const QModelIndex & sourceIndex) const
{
return index(sourceIndex.row(),sourceIndex.column());
}
virtual QModelIndex mapToSource(const QModelIndex & proxyIndex) const
{
return index(proxyIndex.row(),proxyIndex.column());
}
virtual int columnCount(const QModelIndex & parent = QModelIndex()) const
{
return sourceModel()->columnCount();
}
virtual int rowCount(const QModelIndex & parent = QModelIndex()) const
{
return sourceModel()->rowCount();
}
virtual QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const
{
return createIndex(row,column);
}
virtual QModelIndex parent(const QModelIndex & index) const
{
return QModelIndex();
}
};
#endif // FILES_PROXY_MODEL_H
//and this is a dialog class:
Line_Counter::Line_Counter(QWidget *parent) :
QDialog(parent), model_(new File_List_Model(this)),
proxy_model_(new File_Proxy_Model(model_)),
sel_model_(new QItemSelectionModel(proxy_model_,this))
{
setupUi(this);
setup_mvc_();
}
void Line_Counter::setup_mvc_()
{
listView->setModel(proxy_model_);
listView->setSelectionModel(sel_model_);
}
好像这并未”不要做诡计。 – smallB
@smallB:即使没有修复,listview似乎显示的项目(但他们都禁用/灰色)。所以这个问题可能与你的源模型有关。 – alexisdm
您是否告诉您已将代理模型插入到该模型中,并让它们工作?如果是这样,你可以发布这个代码,这样我可以看看它?谢谢。 – smallB