Qt命名类的方法背后的理由是什么?

时间:2009-08-28 10:43:29

标签: api qt class naming-conventions namespaces

我想知道为什么Qt在每个类名之前使用Q而不是将所有内容都放在命名空间中。是否有任何特殊原因,例如使名称易于搜索,或仅仅是品牌名称?

6 个答案:

答案 0 :(得分:7)

我相信这是历史性的。命名空间在1995年左右被引入到C ++中.Qt开发始于1991年,因此显然无法使用命名空间。

答案 1 :(得分:3)

这可能是一个可移植性问题。每个编译器都不支持命名空间,因此命名约定有助于减少命名冲突。

答案 2 :(得分:2)

Qt对它使用的C ++语言功能非常保守。没有名称空间,exceptions or RTTI。另请参阅this article,详细说明模板未在信号/插槽处理中使用的原因。

答案 3 :(得分:2)

Qt的文档引用namespaces,虽然我没有检查代码以查看它们是否真的是c ++ namespace或者是否在类中有公开声明的hack。我猜其他人试图避免让每个人都需要重命名所有内容,尽管他们可以提供迁移路径,如下所示:

namespace Qt
{
class Object { ... };
}

#ifndef NO_OLD_DECLS
typedef Qt::Object QObject;
#endif

答案 4 :(得分:0)

看到没有一个C ++编译器没有实现名称空间,现在只有一个原因:品牌:)

答案 5 :(得分:0)

Qt使用Q前缀作为其编码风格的一部分。它通常用于使更容易阅读代码和发现什么是什么。

标识符:

  • 以“Q”为前缀,后缀为“Private”是用于实现细节的私有类,不属于API(例如QPainterPrivate)
  • 前缀为“Q”,后缀为“Private”是公共类(例如QWidget)
  • 以“q”为前缀(小写)是公共全局函数(例如qRgb)

采用编码风格并统一使用它可以让其他人更容易理解他们没有写的代码。

参考:Qt Coding Style