QML,QT,C++实现模糊查找功能
**QML+C++实现模糊查找功能**由于QML中不能直接实现模糊查找功能,所以功能的是现在后台C++部分实现在这里介绍一种容器QSet,QSet具有去重的作用,可将在将数据保存到容器的时候将数据中重复的部分删除,也防止在查找的时候出现重复数据上代码,看备注详解Q_INVOKABLE QVariantList DataManager::search(QString zoneId){if (curF
·
**
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条内容
所有评论(0)