2016-01-25 32 views
1

我有我的代碼:Qt的QHash迭代

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

回答

1

成員方法keyvalue是迭代器接口的一部分。
因此,使用i.key()而不是(*i).key()就足夠了。
這同樣適用於values,您應該使用i.value()而不是(*i).value()
迭代器的operator*返回第i個價值的參考,你的情況的float有沒有成員方法keyvalue確實如此。

的分配應類似於以下的:

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

進一步詳情,請參閱here

1

key()value()是迭代的方法,讓你訪問他們像這樣:

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

*i是一樣i.value(),所以你也可以寫爲QVariant(*i)價值。

你得到你所得到的錯誤,因爲錯誤的路線是一樣的:long id = QVariant(i.value().key()).toLongLong();,明明float值是一種非類的錯誤表示,所以它不能有key()方法(或任何其他成員)。

最後,經歷了QVariant是完全不必要的反正(至少在這種情況下),所以你可以這樣做:

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

文檔參考:http://doc.qt.io/qt-5/qhash-iterator.html