您的位置:首页 > 编程语言 > Qt开发

Qt学习记录,QSortFilterProxyModel

2015-04-01 09:08 471 查看
QSortFilterProxyModel主要可实现按表的标头实现自动排序,及根据过滤条件过滤,具体的demo可以查看QT自带的Item views系列。

我的例子还没加上过滤。

add_da(QAbstractItemModel* model,int &ID,const QString& Description,const QString& Type){
model->insertRow(0);
model->setData(model->index(0,0),ID);
model->setData(model->index(0,1),Description);
model->setData(model->index(0,2),Type);
}

QAbstractItemModel* create_da_model(QObject *parent,QList<Da_result> da_result){
QStandardItemModel *model = new QStandardItemModel(0,3,parent);
model->setHeaderData(0,Qt::Horizontal,QObject::tr("ID");
model->setHeaderData(1,Qt::Horizontal,QObject::tr("Description");
model->setHeaderData(2,Qt::Horizontal,QObject::tr("Type");
foreach(Da_result da_list,da_result{
add_da(model,da_list.ID,da_list.Description,da_list.Da_Type);
}

return model;
}

QSortFileterProxyModel* proxyModel = new QSortFilterProxyModel;
proxyModel->setDynamicSortFilter(true);

ui.DaTreeView->setRootIsDecorated(false);
ui.DaTreeView->setAlternatingRowColors(true);
ui.DaTreeView->setModel(proxyModel);
ui.DaTreeView->setSortingEnabled(true);

proxyModel->setSourceModel( create_da_model(this,da_result) );


总结下:一般我们都是直接使用view->setModel来将数据显示在view上,这就是QT的model/view模式。

这里也不例外:ui.DaTreeView->setModel(proxyModel);

而这个proxyModel的内容是什么呢?

proxyModel->setSourceModel( create_da_model(this,da_result) );

这里给我的model填充内容,因为我需要从数据库提取我想要的内容,我把这些内容放在了一个QList里,而不是我们通常使用QSqlQueryModel这样去获取全部的内容后直接作为model传入我的proxyModel,这里我就需要创建我自己的model了,那么跳到函数create_da_model();

该函数要做的就是先填标头,然后遍历将我QList的内容填入。这里就不做多解释了,不明白?那么留言吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt