我使用QSortFilterProxyModel
很新,我很遗憾。
我正在实施一个" TcpSocket"注册,所以每次客户端连接到服务器时,我都会在QML中获得一个排序模型,它显示每个客户端的ip。问题是每次由于新的/丢失的连接而刷新QSortFilterProxyModel
时变量isCurrentItem
都失去了所有意义,因为列表已更新但不是列表的索引。然后,我想要做的是在QSortFilterProxyModel
实现中创建一个函数,该函数返回其" position"给定客户端的ip以正确更新当前项目索引。
为了您的参考,我发现this code与我想要做的完全相反(返回在某个&#34上注册的客户的客户端的" 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)
。每个人都有任何暗示达到我的目的吗?
答案 0 :(得分:0)
好的,这就是我要做的事情:
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;
}
无论如何,我不确定这是处理它的最有效方式。