如何使用Qt5编程C++ 11?

IAE*_*IAE 16 c++ qt gcc cross-platform c++11

我正准备和我的朋友一起编写跨平台项目.我们决定分别使用Qt和gcc作为我们的IDE和工具链.他在Linux上工作,我在Windows上工作.

但是,Linux上的gcc不一定是Windows上的gcc.更具体地说,Windows上的Qt使用gcc 4.4安装mingw,我的朋友有gcc 4.7.所以我尝试为Windows获取更新的gcc版本.

我目前的Qt版本是5,使用从本网站下载并安装的gcc 4.7:http://www.equation.com/servlet/equation.cmd? fa = fortran

我在C:\ QtSDK\mingw中安装它,并简单地覆盖了Qt安装中存在的所有文件.我想如果我只是采取短路线,我就不必在Qt中重新配置任何东西.

但是,即使使用编译器标志:

QMAKE_CXXFLAGS += -std=c++0x (Qt 4.7)
Run Code Online (Sandbox Code Playgroud)

CONFIG   += c++11 (Qt5)
Run Code Online (Sandbox Code Playgroud)

IDE或工具链无法编译简单的基于范围的for循环:

int main(int argc, char *argv[])
{
    int my_array[5] = {1, 2, 3, 4, 5};
    for (auto x : my_array)
        std::cout << x << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或初始化列表:

int main(int argc, char *argv[])
{
    QVector<int> testsData { 1, 2, 10, 42, 50, 123  };
    QStringList options = { QLatin1String("foo"), QLatin1String("bar")  };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,看一下gcc 4.7的实现细节,这两个特性以及更多特性应该随时可用.

有没有其他人试图使用gcc和Qt for Windows?如果是这样,你是如何让它工作的?我想要一个使用gcc 4.6或4.7的解决方案,但如果不可能的话会更少.

或者,是否存在使用C++ 11功能的Linux和Windows开发环境?如果它真的有效,我还会满足于Qt以外的东西......

我使用了这些来源:

Qt中的C++ 0x(Qt 4.7-4.8)

Qt5中的C++ 11

小智 13

QMAKE_CXXFLAGS += -std=c++0x
Run Code Online (Sandbox Code Playgroud)

因为您没有使用MinGW编译器而导致错误."D9002:忽略未知选项-std=c++0x"是MSVC编译器的错误.

在QtCreator中,转到项目选项卡(左侧)并更改您正在使用的工具链.如果它没有自动检测MinGW,您将不得不通过单击管理按钮自己添加它.


Zin*_*gam 10

更新:

根据此链接:https://wiki.qt.io/How_to_use_C%2B%2B11_in_your_Qt_Projects

现在可以这样做:

CONFIG += c++11
Run Code Online (Sandbox Code Playgroud)

要么

CONFIG += c++14
Run Code Online (Sandbox Code Playgroud)

另外,升级Qt 5.7将默认需要C++ 11编译器,并且将放弃对旧的非C++ 11编译器的支持.

较旧的更新:

要启用C++ 11 - 需要GCC 4.7及更高版本:

qmake构建系统:

QMAKE_CXXFLAGS += -std=c++11
Run Code Online (Sandbox Code Playgroud)

qbs构建系统:

cpp.cxxLanguageVersion: "c++11"
Run Code Online (Sandbox Code Playgroud)

要启用C++ 14 - 需要GCC 4.9及更高版本:

qmake构建系统:

QMAKE_CXXFLAGS += -std=c++14
Run Code Online (Sandbox Code Playgroud)

qbs构建系统:

cpp.cxxLanguageVersion: "c++14"
Run Code Online (Sandbox Code Playgroud)

注意:请注意"c ++ 11","c ++ 14"等区分大小写.


过时版本:

qbs构建系统:

cpp.cxxFlags: "-std=c++11"
cpp.cxxFlags: "-std=c++14"
Run Code Online (Sandbox Code Playgroud)

旧版本:

现在推荐GCC 4.7用于Qt5.使用GCC 4.7,您可以使用QMAKE_CXXFLAGS + = -std = c ++ 11

编辑:随着GCC 4.9,现在有可能通过使该标志以使C++ 14:QMAKE_CXXFLAGS + = -std = C + 11