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的内容填入。这里就不做多解释了,不明白?那么留言吧。
时间: 2024-10-01 05:05:55