我正在尝试为较旧的Qt4应用程序添加一些功能,而我是Qt的新手。该应用程序使用foreach
关键字,我相信它是由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
提前退出循环。
我做错了什么?该应用程序是根据问题4.8.7构建的。
根据记录,这是GCC 9(错误报告(的行为变化,与break;
语句应该出现在哪里以及它们的作用有关。
9之前的GCC版本似乎做了错误的事情,但Qt4是围绕这种行为编写的,所以一旦在GCC 9中修复了它,Qt的foreach循环就中断了。
它看起来已经在最近的Qt版本中得到了解决,但不幸的是,在Qt4中没有。