Qt中的foreach有什么问题?

时间:2015-11-13 15:10:16

标签: qt

好吧,我试了一下。这应该是非常简单的,但我找到了我的foreach正在发生的事情。它没有帮助。

    #include <QCoreApplication> 
    //coreapplication or Qapplication the error is there
    #include <QList>
    #include <QDebug>

    int main()
    {
      QList<int> list;

      list << 1 << 2 << 3 << 4 << 5;

      foreach (int i, list) //expected token ';' got 'int'.
      {
        qDebug() << i;
      }
    }
    /*
    QT += core gui

    TARGET = QtTest
    CONFIG += console
    CONFIG -= app_bundle
    CONFIG += no_keywords

    TEMPLATE = app

    SOURCES += main.cpp

    */

2 个答案:

答案 0 :(得分:10)

您在配置中指定了scope: {bindModel:'=ngModel'}。您必须使用no_keywords代替Q_FOREACH。请参阅foreach的{​​{3}}。

话虽这么说,我会切换到基于C ++ 11范围的foreach,因为它在类型中没有逗号问题。例如,

for

将无法编译,因为预处理器认为您尝试使用3个参数而不是2来调用宏。

答案 1 :(得分:3)

相反,您可以使用C++11 for(:)

for(int i:list)
{
    qDebug() << i;
}

请注意,您必须使用C++-11标志进行编译,因此请将此行添加到项目文件中:

QMAKE_CXXFLAGS += -std=c++11

请注意,C ++ 11 for比Qt foreach效率更高,如下所示:Qt foreach loop ordering vs. for loop for QList


修改 就像Frank Osterfeld评论一样,您也可以使用:

CONFIG+=c++11

5.4之后的.pro文件中的

,如下所示:How to use C++11 in your Qt Projects.