我是使用QSortFilterProxyModel的新手,我有点迷失了。
我正在实现“ TcpSocket”寄存器,因此,每次将客户端连接到服务器时,我都会在QML中得到一个排序的模型,该模型显示了每个客户端的ip。问题是,由于新的/丢失的连接,每次刷新QSortFilterProxyModel时,变量isCurrentItem都失去了意义,因为列表是更新的,而不是列表的索引。然后,我想做的是在QSortFilterProxyModel实现中创建一个函数,该函数在给定客户端IP的情况下返回其“位置”以正确更新当前项目索引。

供您参考,我发现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;
}


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

10-08 09:05