如何让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; 
} 

无论如何,我不确定这是处理它的最有效的方法。