使用foreach循环嵌套的QHash



我有QHash<QString, QHash<quint64, QElapsedTimer*> myNestedQHash;,当我尝试时

foreach (QHash<quint64, QElapsedTimer*>  stat, myNestedQHash.values(someStr))

我得到

error: macro "Q_FOREACH" passed 3 arguments, but takes just 2

难道不能像我那样在嵌套的QHash上循环吗?

为什么不使用

for (QHash<QString, QHash<quint64, QElapsedTimer*>::iterator it = myNestedQHash.begin(); it != myNestedQHash.end(); ++it) 
{...}

相反?我认为Q_FOREACH会创建一个副本,所以它的性能也会更好。。。

/编辑:

foreach只是Q_foreach宏的定义。。。所以编译器看到它,它将接受2个值。由于其中有一个额外的逗号,它将看到3个参数。你可以在这里找到所有信息。

应该这样工作:

QHash<QString, int> myHash0;
myHash0["test0"]=0;
myHash0["test1"]=1;
QHash<QString, int> myHash1;
myHash1["test0"]=0;
myHash1["test1"]=1;
QHash<QString, QHash<QString, int> > myHashList;
myHashList["Hash0"] = myHash0;
myHashList["Hash1"] = myHash1;
QHash<QString, int> h;
foreach(h , myHashList)
{
    qDebug()<<h["test0"];
}

QT foreach是一个宏。宏中的参数用逗号, 分隔

在您的案例中,您使用了一个内部带有逗号的模板。

你可以把它写成:

QHash<quint64, QElapsedTimer*>  stat;  
foreach (stat, myNestedQHash.values(someStr))

相关内容

  • 没有找到相关文章

最新更新