如何让QSortFilterProxyModel中的项目的行给QString?
问题描述:
我很新,使用QSortFilterProxyModel
,我很失落。 我正在实现一个“TcpSocket”寄存器,所以每次客户端连接到服务器时,我都会在QML中获得一个已排序的模型,它将显示每个客户端的IP。问题是每次QSortFilterProxyModel
由于新的/丢失的连接而被刷新时,变量isCurrentItem
失去了所有的意义,因为列表被更新,但不是列表的索引。然后,我想要做的是在QSortFilterProxyModel
实现中创建一个函数,该函数返回给定客户端ip的“位置”,以正确更新当前项目索引。如何让QSortFilterProxyModel中的项目的行给QString?
供您参考,我发现this code这不正是什么,我想要做的相反(返回“IP”在某“排在客户端注册的客户):
QVariantMap proxyModel::getIP(int row) {
QHash<int,QByteArray> names = roleNames();
QHashIterator<int, QByteArray> i(names);
QVariantMap res;
while (i.hasNext()) {
i.next();
QModelIndex idx = index(row, 0);
QVariant data = idx.data(i.key());
res[i.value()] = data;
qDebug() << i.key() << ": " << i.value() << " " << data;
}
return res;
}
注?它模拟一个正常的QML模型ListModel::get(int row)
人都有每个人的任何线索,以达到我的目的
答
好吧,这是我做的就是该行:
int proxyModel::getIp(QString ip)
{
QHash<int,QByteArray> names = roleNames();
QHashIterator<int, QByteArray> i(names);
while (i.hasNext()){
i.next();
int proxylenght = rowCount();
for(int a=0;a<proxylenght;a++)
{
QModelIndex idx = index(a, 0);
QVariant data = idx.data(i.key());
if(data == ip)
return a;
}
}
return -1;
}
无论如何,我不确定这是处理它的最有效的方法。