免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2380 | 回复: 0
打印 上一主题 下一主题

Qt学习之路(44): QSortFilterProxyModel [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-22 10:15 |只看该作者 |倒序浏览
  t为我们预定义了很多model,前面已经说过了QStringListModel、QDirModel(也算是Qt推荐使用的 QFileSystemModel吧,这个在上一章最后重新加上了一段话,没有注意的朋友去看看哦)。今天我们要说的这个 QSortFilterProxyModel并不能单独使用,看它的名字就会知道,它只是一个“代理”,真正的数据需要另外的一个model提供,并且它是用来排序和过滤的。所谓过滤,也就是说按照你输入的内容进行数据的筛选,很像Excel里面的过滤器。不过Qt提供的过滤功能是基于正则表达式的,因而功能强大。
  我们从代码开始看起:
  sortview.h
#ifndef SORTVIEW_H
#define SORTVIEW_H
#include 
class SortView : public QWidget
{
        Q_OBJECT
public:
        SortView();
private:
        QListView *view;
        QStringListModel *model;
        QSortFilterProxyModel *modelProxy;
        QComboBox *syntaxBox;
private slots:
        void filterChanged(QString text);
};
#endif // SORTVIEW_H
  sortview.cpp
#include "sortview.h"
SortView::SortView()
{
        model = new QStringListModel(QColor::colorNames(), this);
        modelProxy = new QSortFilterProxyModel(this);
        modelProxy->setSourceModel(model);
        modelProxy->setFilterKeyColumn(0);
        view = new QListView(this);
        view->setModel(modelProxy);
        QLineEdit *filterInput = new QLineEdit;
        QLabel *filterLabel = new QLabel(tr("Filter"));
        QHBoxLayout *filterLayout = new QHBoxLayout;
        filterLayout->addWidget(filterLabel);
        filterLayout->addWidget(filterInput);
        syntaxBox = new QComboBox;
        syntaxBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
        syntaxBox->addItem(tr("Regular expression"), QRegExp::RegExp);
        syntaxBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
        syntaxBox->addItem(tr("Fixed string"), QRegExp::FixedString);
        QLabel *syntaxLabel = new QLabel(tr("Syntax"));
        QHBoxLayout *syntaxLayout = new QHBoxLayout;
        syntaxLayout->addWidget(syntaxLabel);
        syntaxLayout->addWidget(syntaxBox);
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(view);
        layout->addLayout(filterLayout);
        layout->addLayout(syntaxLayout);
        connect(filterInput, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString)));
}
void SortView::filterChanged(QString text)
{
        QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(
                        syntaxBox->itemData(syntaxBox->currentIndex()).toInt());
        QRegExp regExp(text, Qt::CaseInsensitive, syntax);
        modelProxy->setFilterRegExp(regExp);
}
          
                       
                               
编缉推荐阅读以下文章
                               

              
                         
  • Qt学习之路(47): 自定义Model之三
                        
                         
  • Qt学习之路(46): 自定义model之二
                        
                         
  • Qt学习之路(45): 自定义model之一
                        
                         
  • Qt学习之路(43): QDirModel
                        
                         
  • Qt学习之路(42): QStringListModel
                        
                         
  • Qt学习之路(41): QTableWidget
                        
                         
  • Qt学习之路(40): QTreeWidget
                        
                         
  • Qt学习之路(39): QListWidget
                        
                         
  • Qt学习之路(38): model-view架构
                        
                         
  • Qt学习之路(37): Qt容器类之关联存储容器
                        
                                   

                       
                       
         
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP