**

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"
                    }
               }
}

这里只是部分代码

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐