Qt QHash迭代器

时间:2016-01-25 06:52:39

标签: c++ qt

我有我的代码:

for(QHash<long,float>::iterator i=list.begin();i!=list.end();++i)
{
    long id = QVariant((*i).key()).toLongLong();
    float ile = QVariant((*i).value()).toFloat();
}

我变成了这个错误:

request for member 'key' in 'i.QHash<K,V>::iterator::operator*<long int, float>()', which is of non-class type 'float'    
             long id = QVariant((*i).key()).toLongLong();

如何将key()value()转换为floatint

2 个答案:

答案 0 :(得分:2)

成员方法keyvalue是迭代器接口的一部分 因此,使用i.key()代替(*i).key()就足够了 这同样适用于values,您应使用i.value()代替(*i).value() 迭代器的operator*返回对 i-th 值的引用,在您的情况下返回到没有成员方法float和{{key的{​​{1}} 1}}确实。

作业应类似于以下内容:

value

有关详细信息,请参阅here

答案 1 :(得分:1)

key()value()是迭代器的方法,因此您可以像这样访问它们:

    long id = QVariant(i.key()).toLongLong();
    float ile = QVariant(i.value()).toFloat();

*ii.value()相同,因此您也可以为该值撰写QVariant(*i)

你得到的错误,因为错误的行与此相同:long id = QVariant(i.value().key()).toLongLong();,显然float值是错误中所说的非类,所以它可以& #39; t key()方法(或任何其他成员)。

最后,无论如何,通过QVariant完全没必要(至少在这种情况下),所以你可以这样做:

    long id = i.key();
    float ile = *i;

文档参考:http://doc.qt.io/qt-5/qhash-iterator.html