QML,QT,C++实现模糊查找功能

**

QML+C++实现模糊查找功能

**

由于QML中不能直接实现模糊查找功能,所以功能的是现在后台C++部分实现
在这里介绍一种容器QSet,QSet具有去重的作用,可将在将数据保存到容器的时候将数据中重复的部分删除,也防止在查找的时候出现重复数据
上代码,看备注详解

Q_INVOKABLE QVariantList DataManager::search(QString zoneId)
{
	if (curFiles == nullptr)
	{
		return QVariantList();
	}
	//定义一个QSet容器,存储Number
	QSet<int> idSet;
	for (int i = 0; i < cur->List.size(); i++)         // cur->List是我从XML文件中读取数据
	{
		Station *curSt = cur->List[i];                //设置station,用于保存每一行数据
		idSet.insert(curSt->Number);           //读取到每一行中Number对应的数据,并保存到QSet中
	}
	QVariantList zoneIdList;                                //定义一个链表,保存赛选的数据
		for (auto it = idSet.begin(); it != idSet.end(); it++)     //遍历整个QSet 
		{
			QString listNum;        //定义一个字符,
			int num = *it;
			int i = zoneId.size();         //i用于存储输入的数字的size
			listNum = QString::number(num);      //QString::number用于将int转换成Qstring,因为在查找的时候输入的是字符串,
			if (listNum.mid(0, i) == zoneId)        //mid截取字符串,通过i判断截取多少个,然后进行比较,是否与zoneid相等
			{
				zoneIdList.push_back(*it);         //如果相等则保存到链表中
			}
		}
	return zoneIdList;                                        
}

先查看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前端部分
在QML中我是用的是ListView,通过model调用search(QString zoneId),返回值modelData为数据

ListView{
                id:zonelist
                model:dataManager.search(text)
                clip: true
                delegate: Item{
                    id:_delegates
                    width: parent.width
                    height: 20
                    Text {
                        text: modelData
                        x:5
                        y:5
                        font.pixelSize: 16
                        color:"white"
                    }
               }
}

这里只是部分代码

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值