我的课程名称应该以Qt中的'Q'开头吗?

Ven*_*emo 16 c++ qt qt4 qt-creator

当我第一次开始使用Qt时,每个班级的名字都以"Q"开头是非常烦人的,但现在我已经习惯了.

我正在使用Qt Creator,它很好地突出了代码.
但是,它只突出显示以"Q"开头的类名.它突出了以'Q'开头的一切,即使没有这种类型.
它不会突出显示自定义类名.

这让我想知道,我是否也应该用'Q'开始我的所有课程名称?
或者至少是可重复使用的?
(我的意思是,我放在类库中,或在其他应用程序中重用.)

我见过几个地方,他们用这种方式命名他们的课程.这是好事吗?

我找到了关于Qt命名约定的这个页面,但它没有解决这个问题.

另外,我不明白为什么Qt不使用命名空间.

编辑:

非常感谢与我分享他的想法的每个人.

编辑2:

似乎较新版本的Qt Creator现在也突出了不以'Q'开头的类名.太好了!

Tro*_*our 25

我不明白你为什么要在你自己的课上强制执行这个.让Qt按照它的类命名约定做你想做的事情,你自己做.

  • +1.我还会说用Q为前缀你自己的类可能会让人感到困惑(甚至是你),让他们相信某些类属于Qt Core,而不是. (12认同)
  • @Inverse:祈祷告诉你,如果你使用的是多个图书馆而不仅仅是Qt,你会做什么?采取某种平均值? (8认同)
  • +1.Qt使用前缀来避免与客户端符号冲突(因为它们不使用命名空间).用它们的前缀命名你自己的符号只会增加发生冲突的可能性,更不用说混淆因素了.只需使用您自己的前缀. (6认同)

Tri*_*ner 11

个人而言,我不会在我自己的课程前加上前缀.由于Qt有很多东西(字符串,列表......)的实现,因此有助于了解您正在使用的内容.

正确的方法是使用名称空间.我认为Qt没有使用它们,因为它已经很老了.C++最近发生了很大的变化.

通常,根据语法着色调整您的命名约定是一个坏主意(即使我明白它只会让您对您的命名感到疑惑).

  • @Venemo:它可能会破坏太多的现有代码. (4认同)
  • @Venemo和@Tristram:Qt使用自Qt4以来的命名空间,如果你想要的话.在构建Qt之前配置Qt时,您可以传递-qtnamespace参数来包装它.从Qt的帮助:"-qtnamespace <name>包装'namespace <name> {...}'中的所有Qt库代码" (4认同)
  • 嗯,好吧,Qt已经老了,但为什么他们不在最近的版本中引入命名空间呢? (2认同)

Bri*_*ndy 8

使用您自己的编码约定和标准,它不必与您正在使用的库匹配.我不认为Qt的制造者暗示你遵循他们的风格惯例.

  • @ken当您的代码使用两个不同样式的API时会发生什么?我同意Brian,用户生成的代码应该使用相同的样式. (4认同)
  • 您应该尝试匹配您正在使用的API的编码标准.特别是,方法名称应具有相似的样式.如果Qt使用interCaps分隔方法名称中的单词,则不应使用下划线.如果Qt使用propertyName/setPropertyName,则不应将其更改为您自己的代码中的getPropertyName/setPropertyName.(我确信我们可以进入一个关于什么应该匹配和什么不应该匹配的哲学辩论.)但是,因为Qt使用Q前缀为其类创建一个名称空间(来自旧C++的保留不支持名称空间),你不应该使用Q. (2认同)

Com*_* 10 5

我没有用Qt的,但除非你实际延长的Qt的部分,我觉得这是一个非常糟糕的主意使用Qt前缀的特别,因为你是从Qt Creator的报告(IMO)perculiar行为自己的类, .

将相关类与前缀组合在一起是很常见的,但现在这是一种过时的方法.更好的方法是使用命名空间 - 这样做的好处是允许使用简单的前缀不会给你的作用域.

如果您确实使用了名称空间,请确保您的名称空间区分您正在编写的内容与您正在编写的代码,例如,不要使用

Qt::MyClass theClass;
Run Code Online (Sandbox Code Playgroud)

使用

venemo::MyClass theClass;
Run Code Online (Sandbox Code Playgroud)

我相信你能得到这张照片.您可能还想查看QtCreator并将编辑器(或整个IDE)换成可以更好地突出显示C++代码的内容.