Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取给定QString的QSortFilterProxyModel中项目的行?_C++_Qt_Listview_Qml_Qsortfilterproxymodel - Fatal编程技术网

C++ 如何获取给定QString的QSortFilterProxyModel中项目的行?

C++ 如何获取给定QString的QSortFilterProxyModel中项目的行?,c++,qt,listview,qml,qsortfilterproxymodel,C++,Qt,Listview,Qml,Qsortfilterproxymodel,我对使用QSortFilterProxyModel很陌生,我有点迷路了。 我正在实现一个TcpSocket寄存器,所以每次客户端连接到服务器时,我都会在QML中得到一个排序模型,它显示每个客户端的ip。问题是,每次由于新的/丢失的连接而刷新QSortFilterProxyModel时,变量isCurrentItem将失去所有意义,因为列表已更新,但列表的索引未更新。然后,我要做的是在QSortFilterProxyModel实现中创建一个函数,该函数返回给定客户端ip的位置,以正确更新当前项索引

我对使用QSortFilterProxyModel很陌生,我有点迷路了。 我正在实现一个TcpSocket寄存器,所以每次客户端连接到服务器时,我都会在QML中得到一个排序模型,它显示每个客户端的ip。问题是,每次由于新的/丢失的连接而刷新QSortFilterProxyModel时,变量isCurrentItem将失去所有意义,因为列表已更新,但列表的索引未更新。然后,我要做的是在QSortFilterProxyModel实现中创建一个函数,该函数返回给定客户端ip的位置,以正确更新当前项索引

供您参考,我发现这与我想做的完全相反,返回在某一行注册的客户的客户的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;
}
无论如何,我不确定这是最有效的处理方法