网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文
Qt学习之路(44): QSortFilterProxyModel_C/C++_开发语言_软
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/27
下载{$ArticleTitle}原创论文样式

1 2 下一页

  t为我们预定义了很多model,前面已经说过了QStringListModel、QDirModel(也算是Qt推荐使用的 QFileSystemModel吧,这个在上一章最后重新加上了一段话,没有注意的朋友去看看哦)。今天我们要说的这个 QSortFiltERProxyModel并不能单独使用,看它的名字就会知道,它只是一个“代理”,真正的数据需要另外的一个model提供,并且它是用来排序和过滤的。所谓过滤,也就是说按照你输入的内容进行数据的筛选,很像Excel里面的过滤器。不过Qt提供的过滤功能是基于正则表达式的,因而功能强大。

  我们从代码开始看起:

  sortview.h

#ifndef SORTVIEW_H
#define SORTVIEW_H
#include <QtGui>
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);
}

(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号