如何在QSortFilterProxyModel中获取一个项目的行给出QString?

时间:2014-11-13 19:50:39

标签: c++ qt listview qml qsortfilterproxymodel

我使用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)。每个人都有任何暗示达到我的目的吗?

1 个答案:

答案 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;
}

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