0%

Qt Creator配置clang-format格式化代码插件 - 一杯清酒邀明月 - 博客园

Excerpt

clang-format是一种格式化代码的插件,可用于格式化C / C ++ / Java / JavaScript / Objective-C / Protobuf / C#代码。而Qt Creator的格式化代码的功能只支持非常简单的缩进纠正,本博客主要讲述如何在Qt Creator上配置cla


  clang-format是一种格式化代码的插件,可用于格式化C / C ++ / Java / JavaScript / Objective-C / Protobuf / C#代码。而Qt Creator的格式化代码的功能只支持非常简单的缩进纠正,本博客主要讲述如何在Qt Creator上配置clang-format插件。

打开Beautifier插件

打开帮助->关于插件->在Beautifier处打勾,然后重启Qt Creator。

注意一定要重启Qt Creator,Beautifier插件才能生效。

首先要到LLVM下载网站处下载clang-format可执行文件。这时需要根据自己的操作系统和电脑配置挑选适合的版本。我下载的是windows64位版本。

 安装包下载完成之后,双击安装即可。可自定义安装路径,我是安装到了D盘,这里最好记住你安装的路径。

 打开Qt Creator,点击工具->选项->Beautifier->Clang-format

 点击浏览,会跳出一个windows文件窗口,找到clang-format.exe文件并双击,Qt Creator就会自动填入clang-format.exe文件的绝对路径。当然,你也可以选择手动输入clang-format.exe文件的绝对路径。

 然后点击Use customized style->Add

 在新跳出来的窗口中写入你想要的代码格式化样式,关于可设置的样式可以参考Clang-format官方文档。我的format样式如下:

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<span><span>  1</span> <span>{
</span><span> 2</span>
<span> 3</span> <span>BasedOnStyle: Google,
</span><span> 4</span>
<span> 5</span> AccessModifierOffset: -<span>2</span><span>,
</span><span> 6</span>
<span> 7</span> <span>AlignAfterOpenBracket: Align,
</span><span> 8</span>
<span> 9</span> AlignConsecutiveAssignments: <span>false</span><span>,
</span><span> 10</span>
<span> 11</span> AlignConsecutiveDeclarations: <span>false</span><span>,
</span><span> 12</span>
<span> 13</span> <span>AlignEscapedNewlines: DontAlign,
</span><span> 14</span>
<span> 15</span> AlignOperands: <span>true</span><span>,
</span><span> 16</span>
<span> 17</span> AllowAllParametersOfDeclarationOnNextLine: <span>true</span><span>,
</span><span> 18</span>
<span> 19</span> AllowShortBlocksOnASingleLine: <span>true</span><span>,
</span><span> 20</span>
<span> 21</span> AllowShortCaseLabelsOnASingleLine: <span>true</span><span>,
</span><span> 22</span>
<span> 23</span> <span>AllowShortFunctionsOnASingleLine: All,
</span><span> 24</span>
<span> 25</span> AllowShortIfStatementsOnASingleLine: <span>false</span><span>,
</span><span> 26</span>
<span> 27</span> AllowShortLoopsOnASingleLine: <span>false</span><span>,
</span><span> 28</span>
<span> 29</span> <span>AlwaysBreakAfterDefinitionReturnType: None,
</span><span> 30</span>
<span> 31</span> <span>AlwaysBreakAfterReturnType: None,
</span><span> 32</span>
<span> 33</span> AlwaysBreakBeforeMultilineStrings: <span>false</span><span>,
</span><span> 34</span>
<span> 35</span> AlwaysBreakTemplateDeclarations: <span>true</span><span>,
</span><span> 36</span>
<span> 37</span> <span>AlwaysBreakAfterDefinitionReturnType: None,
</span><span> 38</span>
<span> 39</span> <span>AlwaysBreakAfterReturnType: None,
</span><span> 40</span>
<span> 41</span> AlwaysBreakBeforeMultilineStrings: <span>false</span><span>,
</span><span> 42</span>
<span> 43</span> AlwaysBreakTemplateDeclarations: <span>true</span><span>,
</span><span> 44</span>
<span> 45</span> BinPackArguments: <span>true</span><span>,
</span><span> 46</span>
<span> 47</span> BinPackParameters: <span>true</span><span>,
</span><span> 48</span>
<span> 49</span> <span>BreakBeforeBinaryOperators: None,
</span><span> 50</span>
<span> 51</span> <span>BreakBeforeBraces: Attach,
</span><span> 52</span>
<span> 53</span> BreakBeforeTernaryOperators: <span>false</span><span>,
</span><span> 54</span>
<span> 55</span> <span>BreakConstructorInitializers: AfterColon,
</span><span> 56</span>
<span> 57</span> BreakStringLiterals: <span>true</span><span>,
</span><span> 58</span>
<span> 59</span> ColumnLimit: <span>120</span><span>,
</span><span> 60</span>
<span> 61</span> CommentPragmas: <span>'</span><span>^ IWYU pragma:</span><span>'</span><span>,
</span><span> 62</span>
<span> 63</span> CompactNamespaces: <span>false</span><span>,
</span><span> 64</span>
<span> 65</span> ConstructorInitializerAllOnOneLineOrOnePerLine: <span>false</span><span>,
</span><span> 66</span>
<span> 67</span> ConstructorInitializerIndentWidth: <span>4</span><span>,
</span><span> 68</span>
<span> 69</span> ContinuationIndentWidth: <span>4</span><span>,
</span><span> 70</span>
<span> 71</span> Cpp11BracedListStyle: <span>true</span><span>,
</span><span> 72</span>
<span> 73</span> DerivePointerAlignment: <span>false</span><span>,
</span><span> 74</span>
<span> 75</span> DisableFormat: <span>false</span><span>,
</span><span> 76</span>
<span> 77</span> ExperimentalAutoDetectBinPacking: <span>false</span><span>,
</span><span> 78</span>
<span> 79</span> FixNamespaceComments: <span>true</span><span>,
</span><span> 80</span>
<span> 81</span> ForEachMacros: [ <span>foreach</span><span>, Q_FOREACH, BOOST_FOREACH ],
</span><span> 82</span>
<span> 83</span> <span>IncludeBlocks: Regroup,
</span><span> 84</span>
<span> 85</span> IndentCaseLabels: <span>true</span><span>,
</span><span> 86</span>
<span> 87</span> <span>IndentPPDirectives: AfterHash,
</span><span> 88</span>
<span> 89</span> IndentWidth: <span>4</span><span>,
</span><span> 90</span>
<span> 91</span> IndentWrappedFunctionNames: <span>true</span><span>,
</span><span> 92</span>
<span> 93</span> KeepEmptyLinesAtTheStartOfBlocks: <span>false</span><span>,
</span><span> 94</span>
<span> 95</span> MacroBlockBegin: <span>''</span><span>,
</span><span> 96</span>
<span> 97</span> MacroBlockEnd: <span>''</span><span>,
</span><span> 98</span>
<span> 99</span> MaxEmptyLinesToKeep: <span>1</span><span>,
</span><span>100</span>
<span>101</span> <span>NamespaceIndentation: All,
</span><span>102</span>
<span>103</span> ObjCBlockIndentWidth: <span>4</span><span>,
</span><span>104</span>
<span>105</span> ObjCSpaceAfterProperty: <span>false</span><span>,
</span><span>106</span>
<span>107</span> ObjCSpaceBeforeProtocolList: <span>true</span><span>,
</span><span>108</span>
<span>109</span> PenaltyBreakBeforeFirstCallParameter: <span>19</span><span>,
</span><span>110</span>
<span>111</span> PenaltyBreakComment: <span>300</span><span>,
</span><span>112</span>
<span>113</span> PenaltyBreakFirstLessLess: <span>120</span><span>,
</span><span>114</span>
<span>115</span> PenaltyBreakString: <span>1000</span><span>,
</span><span>116</span>
<span>117</span> PenaltyExcessCharacter: <span>1000000</span><span>,
</span><span>118</span>
<span>119</span> PenaltyReturnTypeOnItsOwnLine: <span>60</span><span>,
</span><span>120</span>
<span>121</span> <span>PointerAlignment: Left,
</span><span>122</span>
<span>123</span> ReflowComments: <span>true</span><span>,
</span><span>124</span>
<span>125</span> SortIncludes: <span>true</span><span>,
</span><span>126</span>
<span>127</span> SpaceAfterCStyleCast: <span>false</span><span>,
</span><span>128</span>
<span>129</span> SpaceAfterTemplateKeyword: <span>true</span><span>,
</span><span>130</span>
<span>131</span> SpaceBeforeAssignmentOperators: <span>true</span><span>,
</span><span>132</span>
<span>133</span> <span>SpaceBeforeParens: ControlStatements,
</span><span>134</span>
<span>135</span> SpaceInEmptyParentheses: <span>false</span><span>,
</span><span>136</span>
<span>137</span> SpacesBeforeTrailingComments: <span>2</span><span>,
</span><span>138</span>
<span>139</span> SpacesInAngles: <span>false</span><span>,
</span><span>140</span>
<span>141</span> SpacesInContainerLiterals: <span>false</span><span>,
</span><span>142</span>
<span>143</span> SpacesInCStyleCastParentheses: <span>false</span><span>,
</span><span>144</span>
<span>145</span> SpacesInParentheses: <span>false</span><span>,
</span><span>146</span>
<span>147</span> SpacesInSquareBrackets: <span>false</span><span>,
</span><span>148</span>
<span>149</span> TabWidth: <span>4</span><span>,
</span><span>150</span>
<span>151</span> <span>UseTab: Never,
</span><span>152</span>
<span>153</span> }</span>

复制代码

 Clang-format插件就安装好了。赶快新建一个hello world工程试一下。

原始代码

 点击工具->Beautifier->ClangFormat->Format Current File,就可以格式化代码。

 格式化后代码格式如下:

设置快捷键

每次格式化都需要鼠标点击很多次,有些麻烦。我们可以为格式化代码功能设置一个快捷键。点击工具->选项->环境->键盘

搜索Clang,找到FormatFile,在下方的Key sequence处填写你想要的快捷键,我设置的是Alt+Shift+F,点击OK按钮就可以了。