首页| 论坛| 消息
主题:Qt实用技能汇总1-用好QtCreator
dd759378563发表于 2019-05-18 16:35
简介

本文是《Qt实用技能汇总》系列文章的第一篇,涛哥将教大家,一些QtCreator的实用技巧。
工欲善其事,必先利其器。
这个系列,全是干货!

环境说明

下文以Windows平台的QtCreator为参考,其它平台的菜单栏入口和快捷键 请以实际为准。
QtCreator版本以Qt5.6.x及以上安装包所带的都行,再旧的版本不讨论。

QtCreator折叠全部代码

折叠全部代码,支持C++和Qml。操作方式为:
光标焦点放在代码文本中,之后 菜单栏: 编辑->Advanced->Toggle Fold All

这个功能没有快捷键

QtCreator属性生成

经常需要给自定义的QObject类写一些属性,QtCreator是可以自动生成get、set函数以及change信号的。
只要写上Q_PROPERTY那一行,光标放在Q_PROPERTY上, 用右键菜单 -> Refactor -> Generate Missing Q_PROPERTY Memory 即可生成。
也可以使用快捷键,光标放在Q_PROPERTY上,按Alt + Enter。

QtCreator注释代码

快捷键,注释当前行代码或者当前选中的多行代码
Ctrl + /
已经注释掉的,再按一次取消注释。

QtCreator代码片段

前面的Q_PROPERTY自动生成,其实就是一种代码片段。
比如经常要写这样一段代码
if (pObj) {
delete pObj;
pObj = nullptr;
}

其中的pObj出现了多次,在不同的地方只是pObj这个名字不同,其它if 和 delete操作一模一样。
可以把这段代码封装成模板函数,也可以做成QtCreator的代码片段。(不建议定义宏, 不类型安全和不方便调试)
模板是这样的:
template
safeDelete (T *pObj)
{
if (pObj)
{
delete pObj;
pObj = nullptr;
}
}

代码片段是在写代码时就把实际的代码生成出来了,模板是编译的时候才去生成。所以代码片段可以加快编译速度。
代码片段是这么做的,在菜单的 工具->选项 弹出选项窗口,然后到文本编辑器->片段->下拉选C++

添加一个片段,起名字叫safeD,并填上内容

if ($$) {
delete $$;
$$ = nullptr;
}

写好后点击确定。再回到代码中,输入safeD,按回车就会自动补全前面的片段。
光标出现在$$的地方,有一个高亮颜色,此时只要输入一个名字,按下回车键,后续的地方自动替换成输入的名字了。

QtCreator代码格式化

都9102年了,如果还有人跟你计较大括号要不要换行、指针符号靠左还是靠右这种问题,请用自动格式化工具怼他/她。
QtCreator支持很多种格式化工具,涛哥用的是clang-format。VisualStudio 2017、2019、以及VSCode也支持clang-format
的,都不需要额外安装任何插件。配置起来很简单,只要在项目pro文件同级目录下,放一个配置好的.clang-format的文件就行了。
团队合作的时候,使用同一个.clang-format配置文件,大家的代码格式就都一致了。
clang-format有默认的google、llvm等格式可选,也可以自定义。下面是一个涛哥使用的自定义配置文件,并做了详细的注释

---
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language:Cpp
# BasedOnStyle:WebKit
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: AlwaysBreak
# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments: false
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: false
# 左对齐逃脱换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlines: Right
# 水平对齐二元和三元表达式的操作数
AlignOperands: true
# 对齐连续的尾随的注释
AlignTrailingComments: true
# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: false
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
AllowShortFunctionsOnASingleLine: Empty
# 允许短的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: false
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在定义返回类型后换行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None
# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),
# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函
下一页 (1/3)
回帖(9):
9楼:
8楼:cj123sn:

下载的LLVM 使用clang-format
如果用use customized style 就会报错
7楼:下载的LLVM 使用clang-format
如果用use customized style 就会报错
Error in Beautifie ..

全部回帖(9)»
最新回帖
收藏本帖
发新帖