1. QSortFilterProxyModel不能单独使用,它只是一个“代理”,真正的数据需要另外的一个model提供,而且它是用来排序和过滤的。

2. 实现代码

  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3.  
  4. #include <QDialog>
  5. #include <QtGui>
  6.  
  7. class Dialog : public QDialog
  8. {
  9. Q_OBJECT
  10.  
  11. public:
  12. Dialog(QWidget *parent = 0);
  13.  
  14. public slots:
  15. void reapplyFilter();
  16.  
  17. private:
  18. QSortFilterProxyModel *proxyModel;
  19. QStringListModel *sourceModel;
  20. QListView *listView;
  21. QComboBox *syntaxComboBox;
  22. QLineEdit *filterLineEdit;
  23. };
  24.  
  25. #endif // DIALOG_H

dialog.cpp

  1. #include "dialog.h"
  2.  
  3. Dialog::Dialog(QWidget *parent)
  4. : QDialog(parent)
  5. {
  6. sourceModel = new QStringListModel(this);
  7. sourceModel->setStringList(QColor::colorNames());
  8.  
  9. proxyModel = new QSortFilterProxyModel(this);
  10. proxyModel->setSourceModel(sourceModel);
  11. proxyModel->setFilterKeyColumn(0);
  12.  
  13. listView = new QListView;
  14. listView->setModel(proxyModel);
  15.  
  16. QLabel *filterLabel = new QLabel("Filter:", this);
  17. filterLabel->setFixedWidth(100);
  18. QLabel *patternLabel = new QLabel("Pattern syntax:", this);
  19. patternLabel->setFixedWidth(100);
  20.  
  21. filterLineEdit = new QLineEdit(this);
  22. syntaxComboBox = new QComboBox(this);
  23. syntaxComboBox->addItem("Regular expression", QRegExp::RegExp);
  24. syntaxComboBox->addItem("Wildcard", QRegExp::Wildcard);
  25. syntaxComboBox->addItem("Fixed string", QRegExp::Wildcard);
  26.  
  27. QHBoxLayout *filterLayout = new QHBoxLayout;
  28. filterLayout->addWidget(filterLabel);
  29. filterLayout->addWidget(filterLineEdit);
  30. QHBoxLayout *patternlayout = new QHBoxLayout;
  31. patternlayout->addWidget(patternLabel);
  32. patternlayout->addWidget(syntaxComboBox);
  33. QVBoxLayout *mainLayout = new QVBoxLayout;
  34. mainLayout->addWidget(listView);
  35. mainLayout->addLayout(filterLayout);
  36. mainLayout->addLayout(patternlayout);
  37.  
  38. setLayout(mainLayout);
  39. connect(syntaxComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(reapplyFilter()));
  40. connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(reapplyFilter()));
  41. }
  42.  
  43. void Dialog::reapplyFilter()
  44. {
  45. QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(syntaxComboBox->itemData(
  46. syntaxComboBox->currentIndex()).toInt());
  47. QRegExp regExp(filterLineEdit->text(), Qt::CaseInsensitive, syntax);
  48. proxyModel->setFilterRegExp(regExp);
  49. }

Qt QSortFilterProxyModel示例代码, 使用方法的更多相关文章

  1. QT QStringListModel 示例代码

    1.  QStringListModel , 实现 插入 删除 编辑 list,支持鼠标双击编辑. 2. dialog.h #ifndef DIALOG_H #define DIALOG_H #inc ...

  2. PyQt(Python+Qt)学习随笔:工具箱(QToolBox)编程使用的步骤及示例代码

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 使用toolBox开发应用时,通过Designer设计ui界面时,只能在Designer中设计too ...

  3. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  4. My.Ioc 代码示例——属性和方法注入

    在 My.Ioc 中,我们可以指定让容器在构建好对象实例之后,自动为我们调用对象的公共方法或是为对象的公共属性赋值.在解析对象实例时,容器将根据我们在注册对象时指定的方法调用或属性赋值的先后顺序,调用 ...

  5. 重新 java 对象的 equals 和 hashCode 方法的建议和示例代码

    equals 方法 equals 方法需要满足的规范: 自反性: 对于任意非空引用 x, x.equals(x) 应该返回 true; 对称性: 对于任意引用, 当且仅当 x.equals(y) == ...

  6. C#使用互斥量(Mutex)实现多进程并发操作时多进程间线程同步操作(进程同步)的简单示例代码及使用方法

    本文主要是实现操作系统级别的多进程间线程同步(进程同步)的示例代码及测试结果.代码经过测试,可供参考,也可直接使用. 承接上一篇博客的业务场景[C#使用读写锁三行代码简单解决多线程并发写入文件时线程同 ...

  7. Xamarin官方示例代码无法部署,提示已跳过部署解决方法

    最近利用Visual Studio 2017学习Android开发.主要是通过Xamarin官方的文档进行的.官方的入门指导提供了很多的示例代码.但是下载之后,调试运行的时候,总是无法部署到虚拟机上. ...

  8. 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token

    1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...

  9. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

随机推荐

  1. Java实现单例模式的两种方式

    单例模式在实际开发中有很多的用途,比如我们在项目中常用的工具类,数据库等资源的连接类.这样做的好处是避免创建多个对象,占用内存资源,自始自终在内存中只有一个对象为我们服务. 单例对象一般有两种实现方式 ...

  2. C# Static修饰符的作用

    MSDN上的定义 Use the static modifier to declare a static member, which belongs to the type itself rather ...

  3. 【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持

    前面的几篇博文的操作环境都是在IVM下,IVM可以看作是VIOS的一部分,或者是对VIOS功能的一个扩展,一个IVM只能管理1台物理服务器,而HMC则是一对多.在有HMC来管理物理服务器的情形下,VI ...

  4. Power Systems 虚拟化简介

    本文向您详细地介绍了 Power System 虚拟化相关的技术和亮点,让您对这些最新的虚拟化技术有一个全面的了解.本文来自 IBM Systems Magazine for AIX 中文版. 自从引 ...

  5. [HEOI2014]南园满地堆轻絮

    [HEOI2014]南园满地堆轻絮 BZOJ luogu 二分答案贪心check 首先b[1]最小一定优 之后就贪心的最小化b[i]就行 #include<bits/stdc++.h> u ...

  6. Python3.6全栈开发实例[008]

    8.有如下变量(tu是个元祖),请实现要求的功能:tu = ("alex", [11, 22, {"k1": 'v1', "k2": [&q ...

  7. 4.3 使用STM32控制MC20进行GPRS通讯

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  8. C#数组学习

    1.多维数组 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespa ...

  9. 基于C#委托的深入分析

    1.委托的定义 委托可以看成是一种数据类型,可以用于定义变量能接受的值只能是一个方法. 委托简单的示例: namespace DelegateDemo { class Program { public ...

  10. jdbc驱动jar导入eclipse

    在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ...