Qt foreach() 仅迭代一次,忽略其余项目
Posted
技术标签:
【中文标题】Qt foreach() 仅迭代一次,忽略其余项目【英文标题】:Qt foreach() only iterates once, ignoring the rest of the items 【发布时间】:2020-08-21 10:28:28 【问题描述】:我正在尝试向旧的 Qt4 应用程序添加一些功能,而且我是 Qt 的新手。该应用程序使用foreach
关键字,我相信它是implemented by Qt。然而,应用程序中的所有 foreach
循环只运行一次,而与容器中的项目数量无关。
我将此健全性检查添加到应用程序中:
QString test("1234");
int i = 0;
foreach (QChar c, test)
i++;
int stl = 0;
for (QString::iterator j = test.begin(); j != test.end(); j++)
stl++;
qDebug()
<< "string:" << test
<< "size:" << test.size()
<< "foreach:" << i
<< "stl:" << stl
;
它总是显示这条消息:
string: "1234" size: 4 foreach: 1 stl: 4
我已经用上面的QString
和QModelIndexList
对其进行了测试,每次它只运行一次循环,即使容器报告有多个项目,并且在这两种情况下都是 STL 风格的循环工作正常,只有foreach
提前退出循环。
我做错了什么?该应用程序是针对 Qt 4.8.7 构建的。
【问题讨论】:
【参考方案1】:为了记录,事实证明这是 GCC 9 (bug report) 的行为变化,与 break;
语句应该出现的位置以及它们的作用有关。
9 之前的 GCC 版本似乎做错了事,但 Qt 4 是围绕这种行为编写的,所以一旦在 GCC 9 中得到修复,Qt 的 foreach 循环就会中断。
它在最近的 Qt 版本中是 looks like it has been addressed,但不幸的是在 Qt 4 中没有。
【讨论】:
以上是关于Qt foreach() 仅迭代一次,忽略其余项目的主要内容,如果未能解决你的问题,请参考以下文章
如何仅执行 qgraphicsitem 的 mouseevent ? (忽略 qgraphicsview 的其余 mouseevent)