【问题标题】:Qt foreach() only iterates once, ignoring the rest of the itemsQt foreach() 仅迭代一次,忽略其余项目
【发布时间】: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

我已经用上面的QStringQModelIndexList 对其进行了测试,每次它只运行一次循环,即使容器报告有多个项目,并且在这两种情况下都是 STL 风格的循环工作正常,只有foreach 提前退出循环。

我做错了什么?该应用程序是针对 Qt 4.8.7 构建的。

【问题讨论】:

    标签: foreach qt4


    【解决方案1】:

    为了记录,事实证明这是 GCC 9 (bug report) 的行为变化,与 break; 语句应该出现的位置以及它们的作用有关。

    9 之前的 GCC 版本似乎做错了事,但 Qt 4 是围绕这种行为编写的,所以一旦在 GCC 9 中得到修复,Qt 的 foreach 循环就会中断。

    它在最近的 Qt 版本中是 looks like it has been addressed,但不幸的是在 Qt 4 中没有。

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2014-06-29
      相关资源
      最近更新 更多