QT Creator, проверка синтаксиса для c ++ 11 - PullRequest
7 голосов
/ 05 марта 2012

Как отключить подсвечивание ошибок (красная волна под кодом) для таких операторов с циклическим циклом c ++ 11?

int myint[] = {1,2,3,4,5};
for (auto x : myint){/**/}

При наведении указывается «неожиданный токен :».Код отлично компилируется.

Другая проблема - автозаполнение не показывает unique_ptr в std:: пространстве имен, хотя компилируется нормально.

  • Qt Creator 2.4.0 На основе Qt4.7.4 (32 бита) Построен 12 декабря 2011 года в 01:10:32

Ответы [ 4 ]

10 голосов
/ 18 ноября 2012

Я не понимаю смысл рассуждений в ответе Эндрю.Почему настройка проверки синтаксиса имеет смысл?Синтаксис либо правильный, если задан контекст, заданный командной строкой компилятора, либо неверный.Если это не так, он должен быть помечен как таковой, если нет, то нет.Если правильный код помечен как неправильный, это ошибка или, по крайней мере, неподдерживаемая функция в IDE, и она требует исправления, а не «настройки».

Сказав это, приведенный пример

    int myint[] = {1,2,3,4,5};
    for (auto x : myint){/**/}

отлично работает здесь (сравнительно недавняя сборка из основной ветки).

Что касается другого комментария к Kate: подсветка синтаксиса Kate используется Qt Creator как запасной вариант в тех случаях, когда нет более конкретного синтаксисавыделение доступно для файла.В случае C ++ (98/03/11) используется реальная модель кода, а не определения Кейт.

5 голосов
/ 14 июня 2012

Есть «подсветка синтаксиса» (раскраска) и «проверка синтаксиса» (волнистые подчеркивания). Цветовая подсветка синтаксиса, похоже, связана с Кейт, как предлагает @Koying, вы можете изменить цвета и отключить его. Начиная с Qt Creator 2.5.0, похоже, нет проблем с большинством C ++ 11 примеров, которые я вставляю из Интернета, хотя в вашем примере действительно есть подчеркивание:

http://labs.qt.nokia.com/2012/05/09/qt-creator-2-5-0-released/

Также, к сожалению, на момент написания (13 июня 2012 года, то есть примерно через месяц после выпуска) последний интегрированный пакет SDK все еще устанавливает Qt Creator 2.4.1 по умолчанию. : - /

Если это лодка, на которой кто-то находится и хочет попробовать последнюю версию, не делайте то, что я сделал , стирая вашу установку Qt SDK с помощью /opt/QtSDK/SDKMaintenanceTool! Это было потрачено впустую время на переустановку, после чего я выполнил sudo rm -r /opt/QtSDK/QtCreator, а затем велел новому выпуску Qt Creator установить на /opt/QtSDK/QtCreator. Я обновлю этот пост, если столкнусь с таким выбором!

http://qt -project.org / вики / Qt_Creator_Releases

НО , хотя, похоже, он работает со многими конструкциями C ++ 11, он ничего не делает для вашего примера и для конкретного случая, с которым я столкнулся, - это unspaced<nested<syntax>> для шаблонов.

(Примечание: это может показаться незначительным, но для меня это большая функция C ++ 11. Я ненавижу , когда приходится делать tailspaced<nested<syntax> > ... что привело я всегда делаю fullyspaced< nested< syntax > > на всех шаблонах, чтобы все было согласованно. Даже простые случаи, такие как vector< int >. Теперь, когда они исправили компилятор, я готов убить весь этот пробельный шум.)

Кажется, нет никакого способа отключить волнистые подчеркивания (, если вы не перекомпилируете Qt Creator ??).

in qt-creator-2.5.0-src\src\plugins\cpptools\cppmodelmanager.cpp:

        QTextCharFormat errorFormat;
        /* disable error underline
        errorFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
        errorFormat.setUnderlineColor(Qt::red);
        */

        // set up the format for the warnings.
        QTextCharFormat warningFormat;
        /* disable warning underline
        warningFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
        warningFormat.setUnderlineColor(Qt::darkYellow);
        */

В любом случае, это является безумным следствием дублирования работы компилятора в IDE вместо того, чтобы иметь два совместно используемых кода интерфейса. Мы живем в темные века программного обеспечения. Кто-нибудь спасет нас ? [/ Напыщенная] * * 1 047

Вот некоторые из соответствующих кодов (я думаю):

https://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/plugins/cppeditor/cpphighlighter.cpp

... и лексер здесь, обратите внимание на член _cxx0xEnabled:

https://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/libs/cplusplus/SimpleLexer.cpp#line80

Кроме вашего for синтаксиса, интервал между шаблонами - единственное, что я нашел в C ++ 11, который вызывает строки. Это достаточно важно для меня, чтобы я мог просто создать свой собственный QtCreator для решения этой проблемы!

4 голосов
/ 06 марта 2012

Если вы пишете на C ++ 11, вам следует перейти от использования QT Creator в качестве IDE к использованию Eclipse CDT.По крайней мере, так я решил эту проблему.У QT Creator, похоже, нет способа настроить проверку синтаксиса в реальном времени.Eclipse, с другой стороны, в этом отношении значительно настраивается.

Обновление: Я думаю, что QtCreator улучшил свою поддержку новых версий C ++ с тех пор, как был дан этот ответ, поэтому он больше неправильный.Я не могу удалить его, так как это принятый ответ.

0 голосов
/ 06 марта 2012

Qt Creator использует определения выделения синтаксиса из редактора Kate (из KDE). См. Инструменты-Параметры-Текстовый редактор-Общий маркер.

Если у Кейт есть определение для c ++ 11, вы можете использовать его или разработать свое собственное.

...