gpt4 book ai didi

c++ - 使用代理模型

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:06 26 4
gpt4 key购买 nike

我通过子类化 QAbstractProxyModel 创建了 Proxy 模型,并将其作为模型连接到我的 View 。我还为此代理模型设置了源模型。不幸的是,出了点问题,因为我没有在我的 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_);
}

最佳答案

mapToSource 应该从源模型返回一个索引:

virtual QModelIndex mapToSource(const QModelIndex & proxyIndex) const
{
return sourceModel()->index(proxyIndex.row(),proxyIndex.column());
}

我用那个代码测试过:

#include <QtGui>
#include "file_proxy_model.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QDir dir(QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
File_List_Model model(dir.entryList());

File_Proxy_Model proxy(&model);

QListView listView;
listView.setModel(&proxy);
listView.show();

return a.exec();
}

// In "File_List_Model.h"
class File_List_Model : public QStringListModel
{
public:
explicit File_List_Model(const QStringList & list, QObject *parent = 0)
: QStringListModel(list, parent)
{
}
};

关于c++ - 使用代理模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com