QT Creator,c ++ 11的语法检查

Tim*_*hko 7 c++ qt qt-creator c++11

如何关闭基于c ++ 11周期范围的运算符的错误突出显示(代码下的红色波形)?

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

悬停提示显示"意外令牌:".代码编译完美.

另一个问题 - 自动完成不会unique_ptrstd::命名空间中显示,但编译正常.

  • Qt Creator 2.4.0基于Qt 4.7.4(32位)建于2011年12月12日01:10:32

tul*_*llo 10

我不明白安德鲁答案中的推理路线.为什么自定义语法检查有意义?给定编译器命令行设置的上下文,语法是正确的,或者是错误的.如果是错的,应该标记为,如果不是,则不是.如果正确的代码被标记为错误,则IDE中的错误或至少是不受支持的功能,它需要修复,而不是"自定义".

话虽如此,引用的例子

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

在这里工作正常(相当近的主分支构建).

关于Kate的其他评论:在没有更多特定语法高亮显示可用于文件的情况下,Qt Creator使用Kate的语法高亮显示作为后备.在C++(98/03/11)的情况下,使用的是真实的代码模型,而不是Kate的定义.


Hos*_*ork 5

有"语法高亮"(着色),还有"语法检查"(波浪下划线).语法着色似乎与Kate有关,因为@Koying建议,您可以修改颜色并将其关闭.从Qt Creator 2.5.0开始,对于我粘贴网页的大多数 C++ 11示例似乎没有问题,尽管您的示例确实仍然具有下划线:

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

还不幸的是,在撰写本文时(2012年6月13日,即发布后大约一个月),最新的集成SDK软件包仍默认安装Qt Creator 2.4.1.: - /

如果这是某人所在的船并且想要尝试最新的,请不要通过使用Wt SDK安装来完成我的工作/opt/QtSDK/SDKMaintenanceTool!这是浪费了重新安装的时间,之后我执行了一个sudo rm -r /opt/QtSDK/QtCreator,然后告诉新的Qt Creator版本安装到/opt/QtSDK/QtCreator.如果我遇到那个选择,我会更新这篇文章!

http://qt-project.org/wiki/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);
        */
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,这都是在IDE中复制编译器工作而不是拥有两个共享前端代码的疯狂后果.我们生活在软件的黑暗时代.不会有人拯救我们吗?[/咆哮]

这是一些相关的代码(我认为):

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

除了你的语法之外,模板间距是我在C++ 11中发现的唯一导致这些行的东西.这对我来说足够重要,我可能只是建立自己的QtCreator来解决它!


And*_*zos 3

如果您使用 C++11 编写,则应该从使用 QT Creator 作为 IDE 更改为使用 Eclipse CDT。至少我是这样解决这个问题的。QT Creator 似乎没有任何方法来自定义这种实时语法检查。另一方面,Eclipse 在这方面可以进行广泛的定制。

更新:我认为自从给出这个答案以来,QtCreator 已经改进了对 C++ 新版本的支持,所以它不再正确。我无法删除它,因为它是已接受的答案。