当我第一次开始使用Qt时,每个班级的名字都以“Q”开头是非常烦人的,但现在我已经习惯了。
我正在使用Qt Creator,它很好地突出了代码 但是,它只突出显示以“Q”开头的类名。它突出了以“Q”开头的一切,即使没有这种类型 它不会突出显示自定义类名。
这让我想知道,我是否也应该用'Q'开始我的所有课程名称? 或者至少是可重复使用的? (我的意思是,我放在类库中,或在其他应用程序中重用。)
我见过几个地方用这种方式命名他们的课程。这是好事吗?
我发现this page关于Qt的命名约定,但它没有解决这个问题。
另外,我不明白为什么Qt不使用命名空间。
修改
非常感谢与我分享他的想法的每个人。
编辑2:
似乎较新版本的Qt Creator现在也突出了不以'Q'开头的类名。尼斯!
答案 0 :(得分:25)
我无法理解你为什么要在自己的课程上强制执行此操作。让Qt按照它的类命名约定做你想做的事情,然后自己做。
答案 1 :(得分:11)
个人而言,我不会在我自己的课程前加上前缀。由于Qt有很多东西(字符串,列表......)的实现,因此有助于了解您正在使用的内容。
正确的方法是使用命名空间。我认为Qt没有使用它们,因为它已经很老了。 C ++最近发生了很大的变化。
通常,根据语法着色调整命名约定是一个坏主意(即使我理解它只会让你对你的名字感到疑惑)。
答案 2 :(得分:8)
使用您自己的编码约定和标准,它不必与您正在使用的库匹配。我不认为Qt的制造者暗示你遵循他们的风格惯例。
答案 3 :(得分:5)
我没有使用过Qt,但是除非你实际上扩展了Qt的部分,否则我认为用Qt为你自己的类添加前缀是一个非常糟糕的主意,特别是因为你报告的(IMO)特有的行为来自Qt Creator。
将相关类与前缀组合在一起是很常见的,但现在这是一种过时的方法。更好的方法是使用命名空间 - 这样做的好处是允许使用简单的前缀不会给你的作用域。
如果您确实使用了名称空间,请确保您的名称空间区分您正在编写的内容与您编写的代码,例如不使用
Qt::MyClass theClass;
使用
venemo::MyClass theClass;
我相信你能得到这张照片。您可能还想查看QtCreator并将编辑器(或整个IDE)换成可以更好地突出显示C ++代码的内容。
答案 4 :(得分:4)
如果您考虑为您的班级添加'Q'前缀,只是为了让Creator为您突出显示它们,那么您可能需要更新到Creators主分支。
创作者使用“Q hack”,因为一直查找所有内容只是昂贵。与此同时,C ++引擎得到了显着改进,这些查找可以在不降低UI的情况下完成,因此最近激活了各种类型的突出显示。
不幸的是,此更改不会再次进入Qt Creator 2.0,因此您需要使用快照或自己构建整个内容。
答案 5 :(得分:2)
嗯,这就是我的工作。我尝试,并且通常会失败,但恕我直言,无论如何都值得尝试,以保持我的大部分代码不知道我正在使用的UI框架。特别是对于自定义小部件的绘图操作,如果我从WX切换到Qt,我希望它们稍后再次工作。因此,我有自己的各种device_context,它是我需要的抽象。然后我有一个WX特定版本的device_context,它可以进行wxDC绘制调用并保存一个wxDC *。
当然,你会认识到这是桥梁模式。
那我该说什么呢?好吧,没有理由将device_context命名为wx_device_context,因为我可以很好地与Qt交谈。我想从我的代码中隐藏wx,还记得吗?
BUT!代表我的客户创建的WX特定子类名为wx_device_context,实际上驻留在为此目的而创建的wx命名空间口袋中。
这对您有何影响?好吧,如果你想要命名一个QSomething类,那么你可能会以特定的方式创建一个与Qt相关的自定义内容。你能通过子类隐藏这个事实,提供客户端可以使用的与UI库无关的接口吗?您正在以这种方式制作小部件吗?如果您曾经决定需要使用其他一些UI库,那么您是否卡住了或者您是否可以简单地覆盖一些基本结构,以便您的自定义小部件可以使用新库?
关键在于你将QSomething命名为QSomething的诱惑是一种“气味” - 虽然是一种常见的并且通常被容忍的 - 你可能想要考虑它的含义以及你能做什么,如果有的话,关于它
答案 6 :(得分:2)
对于名称空间和Qt,Qt确实使用名称空间,而不是一切。 Qt在许多系统上运行,并非所有系统都可能具有完全对命名空间的支持。虽然有当前版本的Qt,但这并不意味着它运行的所有系统都已更新。考虑到使用Qt的代码量,转换所有内容将是一项艰巨的任务;假设Qt运行的所有编译器/平台/系统都没有必要解决将所有内容移动到名称空间中的问题。
Qt不需要命名空间,它们有一个有效的命名方案。想要按照Qt的方式命名你的类,因为你使用Qt就像是想把你的类放在Qt命名空间中,因为你使用的是Qt。我同意诺亚的意见,想要这样做是一种“气味”,尽管普遍容忍仍然不是一个好的举动。有时模仿并不是最真诚的奉承形式。