C++ 如何获取给定QString的QSortFilterProxyModel中项目的行?
我对使用QSortFilterProxyModel很陌生,我有点迷路了。 我正在实现一个TcpSocket寄存器,所以每次客户端连接到服务器时,我都会在QML中得到一个排序模型,它显示每个客户端的ip。问题是,每次由于新的/丢失的连接而刷新QSortFilterProxyModel时,变量isCurrentItem将失去所有意义,因为列表已更新,但列表的索引未更新。然后,我要做的是在QSortFilterProxyModel实现中创建一个函数,该函数返回给定客户端ip的位置,以正确更新当前项索引 供您参考,我发现这与我想做的完全相反,返回在某一行注册的客户的客户的ip:C++ 如何获取给定QString的QSortFilterProxyModel中项目的行?,c++,qt,listview,qml,qsortfilterproxymodel,C++,Qt,Listview,Qml,Qsortfilterproxymodel,我对使用QSortFilterProxyModel很陌生,我有点迷路了。 我正在实现一个TcpSocket寄存器,所以每次客户端连接到服务器时,我都会在QML中得到一个排序模型,它显示每个客户端的ip。问题是,每次由于新的/丢失的连接而刷新QSortFilterProxyModel时,变量isCurrentItem将失去所有意义,因为列表已更新,但列表的索引未更新。然后,我要做的是在QSortFilterProxyModel实现中创建一个函数,该函数返回给定客户端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::getint行。每个人都有实现我目标的任何提示吗?好的,我就是这么做的:
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;
}
无论如何,我不确定这是最有效的处理方法