QML 用QSortFilterProxyModel实现搜索功能
搞了一晚上终于实现了,写个博客纪念一下吧。
c++部分的代码:
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QtQml>
...
#include "bookmodel.h"
int main(int argc, char *argv[])
{
...
qmlRegisterType<BookModel>("Backend", 1, 0, "BookModel");//向qml注册类型
BookModel *bookModel = new BookModel();//这是自己定义的类
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel();
...
bookModel->read(io->text()["book"]);//io是自己定义的读取json的类
QQmlApplicationEngine *engine = new QQmlApplicationEngine();
proxyModel->setSourceModel(bookModel);
//向qml传递变量
engine->rootContext()->setContextProperty("bookModel", bookModel);
engine->rootContext()->setContextProperty("proxyModel", proxyModel);
engine->load(QUrl(QLatin1String("qrc:/main.qml")));
return app.exec();
}
qml部分的代码:
Search是自己写的一个搜索框
import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.1
import QtQuick.Controls.Universal 2.1
import QtQuick.Window 2.1
import Backend 1.0
LDialog{//LDialog是自己修改过的的对话框Dialog
title: "查找"
width: 460
height: 180
signal search(int range, string text)
Row{
spacing: 20
ComboBox{
id: combo
model:[qsTr("书名"),qsTr("出版社"),qsTr("作者"),qsTr("简介"),qsTr("购书日期"),qsTr("id"),qsTr("ISBN号"),qsTr("价格")]
}
TextField {
id: word
width: 200
}
Button {
id: searchBtn
text: qsTr("查找")
onClicked: {
var comap=new Array(BookModel.NameRole,BookModel.PublishRole,BookModel.AuthorRole,
BookModel.BriefRole,BookModel.BuyTimeRole,BookModel.IdRole,
BookModel.IsbnRole,BookModel.PriceRole);//这里的Role是BookModel类里面的一个enum
search(comap[combo.currentIndex],word.text);
}
}
}
}
使用时:
Search{
id: findBookDialog
onSearch: {
proxyModel.filterRole=range;//这个filterRole是proxyModel搜索的范围,也就是指定BookModel中的一个属性
proxyModel.setFilterFixedString(text);//设置搜索内容
bookView.model=proxyModel;//设置展示的内容为搜索筛选后的
}
onRejected: {//取消时显示原来的内容
bookView.model=bookModel;
}
}
QML 用QSortFilterProxyModel实现搜索功能的更多相关文章
- Android搜索功能的案例,本地保存搜索历史记录......
开发的APP有一个搜索功能,并且需要显示搜索的历史记录,我闲暇之余帮她开发了这个功能,现把该页面抽取成一个demo分享给大家. 实现效果如图所示: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使 ...
- Yii 1开发日记 -- 搜索功能及Checkbox的实现
用yii 1实现后台的搜索功能,效果如下图: 1.模型中: public function search() { $criteria = new CDbCriteria; //独立高级搜索 if(is ...
- iOS--- UITableView + UISearchDisplayController - - - - -实现搜索功能
iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 ...
- SharePoint 2013 搜索功能,列表项目不能完全被索引
描述 最近一个站点,需要开启搜索功能,然后创建内容源,开始爬网,发现列表里只有一部分被索引,很多项目没有被索引,甚是奇怪,如下图(其实列表里有80几条项目). 首先爬网账号是系统账号.服务器管理员,所 ...
- idea 光标变成粗体且当前文件搜索功能无法使用的问题
今天安装了idea最新版,安装完成后发现光标变成了粗体,并且快捷键在使用时出现了问题,比如:ctrl+F搜索功能无法使用 经过反复修改配置也无法改善情况,后来一次重启看到下面小窗弹出有关vim的一个提 ...
- js table的笔记,实现添加 td,实现搜索功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- MMS搜索功能修改
高通平台的MMS源码中提供了搜索功能,但要先选择分类(名字,号码,信息内容,彩信主题),再输入字符,根据分类进行搜索. 而在Contacts中却不需要分类,直接根据输入字符搜索任意匹配字段.相比之下, ...
- ILSpy搜索功能加强版
1.修改搜索功能,增加如下的额外搜索选项 A.按文本搜索(默认选项) B.按通配符搜索 C.按正则表达式搜索 2.搜索增加如下特性: A.可以按照名字空间检索特定名字空间下的所有类. B.修正了官方版 ...
- PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))
PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a) robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...
随机推荐
- C. Nastya Is Transposing Matrices
链接 [https://codeforces.com/contest/1136/problem/C] 题意 给你两个规模一样的矩阵 问是否可以通过不断选取A矩阵的子"方正"转置得到 ...
- InvalidDataAccessResourceUsageException:mysql保留字引发的血案
org.springframework.dao.InvalidDataAccessResourceUsageException: could NOT EXECUTE statement; SQL [n ...
- 容器化-Docker介绍
导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程.容器与虚拟机的差异.Docker原理.特点.Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础 ...
- ad2017安装以及破解
1.破Ad破解https://wenku.baidu.com/view/5e23a78e2e3f5727a5e962dd.html 2. Ad 汉化https://jingyan.baidu.com/ ...
- 自己实现数据结构系列四---Queue
一.代码部分 1.定义接口: public interface Queue<E> { void enqueue(E e); E dequeue(); E getFront(); int g ...
- Linux系统tree工具
当用户在linux平台中需要需要查看一个非当前目录的目录下有哪些文件和子文件时,最普通的办法就是cd该目录,然后再ls,这个操作令人不舒适,因为查看完以后,用户还需要切换到原来的目录.现在介绍一款非常 ...
- MySQL的SQL语句优化-group by语句的优化
原文:http://bbs.landingbj.com/t-0-243202-1.html 默认情况下,MySQL排序所有GROUP BY col1, col2, ....,查询的方法如同在查询中指定 ...
- vue单页面模板说明文档(1)
Introduction This boilerplate is targeted towards large, serious projects and assumes you are somewh ...
- 查看端口占用cmd命令
查看端口被占用的进程: 在任务管理器中结束进程:
- snv的使用
1.搭建SVN服务器 (1)直接安装 (2)创建工号,分组,分配权限(图形化界面的直接操作,非图形界面的需要改配置文件conf文件夹下) (3)创建仓库,D:\Repositories\OA:cmd命 ...