Как программировать С++ 11 Использование Qt5? - программирование
Подтвердить что ты не робот

Как программировать С++ 11 Использование Qt5?

Я собираюсь запрограммировать кросс-платформенный проект с моим другом. Мы решили использовать Qt и gcc как нашу среду IDE и toolchain соответственно. Он работает в Linux, я работаю над Windows.

Однако gcc в Linux не обязательно gcc в Windows. Более конкретно, Qt в Windows устанавливает mingw с gcc 4.4, а мой друг имеет gcc 4.7. Поэтому я попытался получить более новую версию gcc для Windows.

Моя текущая версия 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)

и

CONFIG   += c++11 (Qt5)

IDE или инструментальная цепочка не могут скомпилировать простой цикл для цикла:

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;
}

или списки инициализаторов:

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

    return 0;
}

Однако, глядя на детали реализации gcc 4.7, обе эти функции и многое другое должны быть легко доступны.

Кто-нибудь еще пытался использовать gcc и Qt для Windows? Если да, то как вы его заработали? Я бы хотел, чтобы решение использовало gcc 4.6 или 4.7, но будет меньше, если это вообще невозможно.

В качестве альтернативы, есть ли среда для разработчиков для Linux и Windows, которая использует возможности С++ 11? Я бы тоже согласился на что-то помимо Qt, если он просто работает...

Я использовал источники:

С++ 0x в Qt (Qt 4.7-4.8)

С++ 11 в Qt5

4b9b3361

Ответ 1

QMAKE_CXXFLAGS += -std=c++0x

Результат ошибки, потому что вы не используете компилятор MinGW. "D9002: Игнорирование неизвестной опции -std=c++0x" является ошибкой компилятора MSVC.

В QtCreator перейдите на вкладку проектов (слева) и измените используемую инструментальную цепочку. Если он не обнаружил автоматически MinGW, вам придется добавить его самостоятельно, нажав кнопку управления.

Ответ 2

UPDATE:

По этой ссылке: https://wiki.qt.io/How_to_use_C%2B%2B11_in_your_Qt_Projects

Теперь можно просто сделать это:

CONFIG += c++11

или

CONFIG += c++14

Кроме того, по-прежнему компилятор Qt 5.7 WILL REQUIRE С++ 11 по умолчанию и откажется от поддержки более старого компилятора, отличного от С++ 11.

Предыдущее ОБНОВЛЕНИЕ:

Чтобы включить С++ 11 - требуется GCC 4.7 и более новая:

qmake:

QMAKE_CXXFLAGS += -std=c++11

qbs:

cpp.cxxLanguageVersion: "c++11"

Чтобы включить С++ 14 - требуется GCC 4.9 и более новая:

qmake:

QMAKE_CXXFLAGS += -std=c++14

qbs:

cpp.cxxLanguageVersion: "c++14"

ПРИМЕЧАНИЕ. Обратите внимание, что "С++ 11", "С++ 14" и т.д. чувствительны к регистру.


Устаревшая версия:

qbs:

cpp.cxxFlags: "-std=c++11"
cpp.cxxFlags: "-std=c++14"

Старая версия:

GCC 4.7 теперь рекомендуется для Qt5. С GCC 4.7 вы можете использовать QMAKE_CXXFLAGS + = -std = С++ 11

Изменить: С помощью GCC 4.9 теперь можно включить С++ 14, передав этот флаг: QMAKE_CXXFLAGS + = -std = c + 11