Qt学习记录,QSortFilterProxyModel

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

我的例子还没加上过滤。

add_da(QAbstractItemModel* model,int &ID,const QString& Description,const QString& Type){
    model->insertRow(0);
    model->setData(model->index(00),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学习,qt)