首页 > 系统相关 >Qt Creator使用clang-format实现源代码格式化排版(Windows/macOS)

Qt Creator使用clang-format实现源代码格式化排版(Windows/macOS)

时间:2024-02-02 16:34:21浏览次数:25  
标签:bin macOS Qt format clang Clang 源代码 true

本篇先针对Windows系统来描述,末尾再补充macOS

1、clang官网下载clang-format.exe

LLVM Download Page  下载最新版本

Releases · llvm/llvm-project · GitHub

方法1:完整版
我们需要从官网下载完整的LLVM编译器,Pre-Built Binaries,Windows (64-bit),LLVM-9.0.0-win64.exe。安装时,请勾选添加环境变量,Add LLVM to the system PATH for all users。

安装完毕之后,把C:\Program Files\LLVM\bin目录下的clang-format文件和clang-tidy复制到某个文件夹里,比如

F:\Qt\Qt5.12.7\Tools\QtCreator\bin\clang\bin9\ 这里的bin9是新建的文件夹,区别于原来的bin

方法2:单独版

单独版就不需要从官网下载完整的LLVM编译器,因为完整版太大了,包含很多其他工具,没必要。

我们仅仅从LLVM Snapshot Builds,下载clang-format-2663a25f.exe即可,网页截图如下:

下载后把clang-format-2663a25f.exe拷贝到路径F:\Qt\Qt5.12.7\Tools\QtCreator\bin\clang\bin\

clang-format官方文档说明

Clang-Format Style Options — Clang 17.0.0git documentation

ClangFormat — Clang 17.0.0git documentation

如果你的电脑安装了VS2017以上版本,那么该版本自带了clang-format.exe,路径是C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\vcpackages但是VS2017自带的clang-format的LLVM版本是v6.0,比较旧,不建议使用了。

2、Qt Creator Clang-Tidy设置

在Qt Creator里,点击Tools(工具)->Options(选项)->Analyzer(分析器),

在Clang-Tidy填写F:\Qt\Qt5.12.7\Tools\QtCreator\bin\clang\bin\clang-tidy.exe

在Diagnostic configuration里选择Clang-Tidy and Clazy preselected checks [built-in]。

3、Qt Creator Clang-format插件

Qt Creator,在Help栏里,选择About Plugins,勾上Beautifier,重启qtcreator; 

选择Tools->Options,点击左栏的Beautifier,选择Clang Format;

Clang format的路径填写:F:\Qt\Qt5.12.7\Tools\QtCreator\bin\clang\bin\clang-format-2663a25f.exe

在Options里选择use customized style,Add新建一个配置,名称随意取,例如myclangconfig;

重点来了,在Value里,输入以下部分;

 1 # 编程语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
 2 Language: Cpp
 3 # 基础样式
 4 BasedOnStyle: Google
 5 #指针的*的挨着哪边,例如int* a
 6 DerivePointerAlignment: false
 7 PointerAlignment: Left
 8 # 访问修饰符前的空格,例如public,private等
 9 AccessModifierOffset: -4
10 # 缩进宽度
11 IndentWidth: 4
12 # 要保留的最大连续空行数
13 MaxEmptyLinesToKeep: 1
14 # 大括号{}的换行方式,数值是Allman或Attach
15 BreakBeforeBraces: Allman
16 # 是否允许短方法单行,例如int f() { return 0; }
17 AllowShortFunctionsOnASingleLine: true
18 # 支持一行的if,例如值为true,则可以放在一行上。if (a) return;
19 AllowShortIfStatementsOnASingleLine: false
20 # 在未封闭(括号的开始和结束不在同一行)的括号中的代码是否对齐,为true,则将参数在左方括号后水平对齐
21 AlignAfterOpenBracket: true
22 # switch的case缩进
23 IndentCaseLabels: false
24 # 针对OC的block的缩进宽度
25 ObjCBlockIndentWidth: 4
26 # 针对OC,属性名后加空格
27 ObjCSpaceAfterProperty: true
28 # 每行字符的长度
29 ColumnLimit: 0
30 # 注释对齐
31 AlignTrailingComments: true
32 # 括号后加空格,例如(int) i;
33 SpaceAfterCStyleCast: false
34 # 换行的时候对齐操作符
35 AlignOperands: true
36 # 中括号两边空格 []
37 SpacesInSquareBrackets: false
38 # 多行声明语句按照=对齐
39 AlignConsecutiveDeclarations: false
40 # 容器类的空格 例如 OC的字典
41 SpacesInContainerLiterals: false
42 # 在构造函数初始化时按逗号断行,并以冒号对齐
43 BreakConstructorInitializersBeforeComma: true
44 # 函数参数换行
45 AllowAllParametersOfDeclarationOnNextLine: true
46 #在续行(#下一行)时的缩进长度
47 ContinuationIndentWidth: 4
48 # tab键盘的宽度
49 TabWidth: 4
50 # 赋值运算符前加空格
51 SpaceBeforeAssignmentOperators: true
52 # 行尾的注释前加1个空格
53 SpacesBeforeTrailingComments: 1

点击确认按钮之后,最终会在路径C:\Users\<用户名>\AppData\Roaming\QtProject\qtcreator\beautifier\clangformat\myclangconfig生成.clang-format文件。如果该文件使用了中文注释,那么就需要手动另存为UTF-8的编码,否则格式化时会报错:error: Got empty plain scalar。

还有一个更好的办法,先进入路径C:\Users\<用户名>\AppData\Roaming\QtProject\qtcreator\beautifier\clangformat\myclangconfig,然后在命令行终端输入以下命令,可以生成参数模板.clang-format文件
clang-format-2663a25f.exe -style=Microsoft -dump-config > .clang-format

然后再该文件的基础上,修改自己想要的参数。比如:

 1 #https://clang.llvm.org/docs/ClangFormatStyleOptions.html
 2 BasedOnStyle: Microsoft
 3 AccessModifierOffset: -4
 4 AlignConsecutiveMacros: true
 5 AlignTrailingComments: true
 6 AllowShortFunctionsOnASingleLine: Inline
 7 AllowShortIfStatementsOnASingleLine: false
 8 BreakBeforeBraces: Allman
 9 ColumnLimit: 0
10 SortIncludes: Never
11 SeparateDefinitionBlocks: Always
12 AllowShortLambdasOnASingleLine: Empty
13 LambdaBodyIndentation: OuterScope
14 BreakBeforeBraces: Custom
15 BraceWrapping:
16     AfterCaseLabel: true
17     BeforeLambdaBody: false
18 SpacesInLineCommentPrefix:
19     Minimum: 0
20     Maximum: 0

详细的变量说明请参见clang官网Clang-Format Style Options — Clang 17.0.0git documentation

也可以看看效果 https://clangformat.com/

Google C++ Style Guide Google C++ Style Guide

选择Tools->Options,点击左栏的Beautifier,选择General;勾选Enable auto format on save file;Tool选择ClangFormat。

通过菜单操作可以实现格式化

4、设置clang-format快捷键(可有可无)

  • 点击Tools->Options->Environment->Keyboard;
  • 在Filer里输入clang,滤掉一部分方便查找,然后想要的出现了;
  • 选上FormatFile,点下那一栏就行了;
  • 在Key sequence里手动打入Ctrl+shift+k,当然点击右边的Record按钮,按钮会变成stop recording,再在键盘上按照Ctrl->shift->k的顺序按下去,前面两个键按住了不要松,等到按到k再松开,然后快捷键栏里面会出现Ctrl+shift+k,点击stop recording,点击保存。

再补充macOS的用法

  官网下载Pre-Built Binaries中macOS版本的tar-xz文件,大小300+M,注:点击macOS而不是后面的(.sig)
  clang+llvm-9.0.1-x86_64-apple-darwin.tar.xz

解压
  把/clang+llvm-9.0.1-x86_64-apple-darwin/bin目录下的clang-format文件和clang-tidy复制到某个文件夹里,比如
  /Users/<username>/Qt5.12.7/Qt Creator.app/Contents/Resources/libexec/clang/bin9/clang-tidy
  /Users/<username>/Qt5.12.7/Qt Creator.app/Contents/Resources/libexec/clang/bin9/clang-format

这里的bin9是新建的文件夹,区别于原来的bin

  设置QtCreator,clang-format和clang-tidy分别指向该路径
  配置clang-format的格式化风格,.clang-format文件最终会保存在:
  /Users/<username>/.config/QtProject/qtcreator/beautifier/clangformat

 

标签:bin,macOS,Qt,format,clang,Clang,源代码,true
From: https://www.cnblogs.com/ybqjymy/p/18003420

相关文章

  • Qt 解决中报错xxx.h:4:10: ‘QMainWindow‘ file not found
    前言qt中这个报错非常无语,在一个目录下打开是正常的,然后copy项目到其他文件夹就找不到报错,大家的原因都不太相同,这里列出以下几种可能及解决方法。可能1.中文路径很有可能copy到了一个中文路径下的目录,然后导致出现问题。解决方式就是换到英文目录可能2.将.pr......
  • Qt按钮字体旋转
    #include"mainwindow.h"#include"ui_mainwindow.h"classRotatedButton:publicQPushButton{public:explicitRotatedButton(constQString&text,QWidget*parent=nullptr):QPushButton(text,parent){}b......
  • Qt 调试器常见异常
    1.变量无提示信息,解决办法:工具->选项->调试器->概要->选中《当调试时在主编辑器中启用工具提示》2.CDB断点调试,解决无法查看QString值。运行至断点时,程序卡死。解决办法:打开“工具->选项->调试器->CDB”,把“UsePythondumper”选项勾选去掉,保存即可。3.CDB调试速度慢,解决办法如......
  • Qt Access violation - code c0000005 debug write access violation
    WhentryingtodebugmyQtapplication,theappthrowaexceptionas"Exceptionat0x77da2073,code:0xc0000005:writeaccessviolationat:0x1,flags=0x0"IamusingQtcreatorandvs2005compileranddebugger. Iloadtheprojectonvs2005a......
  • PyQt5+python AttributeError: 'QMainWindow' object has no attribute 'slot1'解决办
    Step1.原因分析因为以前写过pyqt5,所以还是有一定的基础的,但是最近重新写上位机的时候,突然发现以前的办法不好用了,以前就是直接从Qtdesigner创建完成后,使用指令生成一个py文件,从main文件中调用就可以了,这次发现,直接使用槽函数,会报错AttributeError:'QMainWindow'objec......
  • OPC/MQTT工业通信软件OPLink
    OPLink是上海泗博自主研发的基于OPC数据采集及转发,OPC数据到MQTT通信的产品。它是基于上海泗博多年的OPC应用经验和工业通信产品的开发背景,推出的OPC/MQTT工业通信软件。软件设计简洁、实用、稳定。同时,OPLink还具备与KepwareLinkMaster相似的数据转发功能,可实现PLC设备间的自主......
  • 关于Qt MySQL有QMYSQL驱动,但是Driver not loaded问题。
    首先,说一下我当时的问题,控制台显示有QMYSQL驱动,但是就是检测不到报错没有驱动,数据库连接不成功。 一开始是一直在复制粘贴.dll和.lib,但是还是不行,一直试一直拖好久都没解决这个问题。因为我sqlite可以用,所以也不着急搞MySQL,但是每次一有时间,看到MySQL不能使就不舒服,就像再调......
  • WPF创建一个类似聊天框的MQTT报文收发界面
    界面的xaml代码如下<ListViewx:Name="LvmqttMsg"Background="Transparent"ItemsSource="{BindingMqttMsgItems}"ScrollViewer.CanContentScroll="False"><ListView.ItemContainerStyle><......
  • pyqt报错、python报错:src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没
    报错信息:-DNDEBUG-fwrapv-O2-Wall-fPIC-O2-isystem/home/devil/anaconda3/envs/91/include-fPIC-O2-isystem/home/devil/anaconda3/envs/91/include-fPIC-I/usr/local/include-I/usr/include-I/home/devil/anaconda3/envs/91/include/python3.10-csrc/pyaudio......
  • pyqt编写的走迷宫游戏环境,python语言,exe文件可以成功运行Window10系统上
    地址:https://pypi.org/project/magic-maze/真实的运行效果:......