Qt 类命名方式背后的基本原理是什么?

发布于 2024-08-03 09:28:52 字数 78 浏览 4 评论 0原文

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

I am wondering why Qt uses Q before every class name rather than putting everything in a namespace. Is there any particular reason, such as making the names easy to search for, or is it just about brand names?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

与风相奔跑 2024-08-10 09:28:52

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

I believe it is historical. Namespaces were introduced into C++ around 1995. Qt development started in 1991 so namespaces could not be used, obviously.

我乃一代侩神 2024-08-10 09:28:52

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

It may be a portability issue. Namespaces weren't / aren't supported by every compiler, so the naming convention helps to cut down on naming clashes.

季末如歌 2024-08-10 09:28:52

Qt 的文档引用了 命名空间,尽管我没有检查代码来查看如果它们确实是 C++ 命名空间,或者是在类内使用公共声明的 hack。我猜其余的人试图避免导致每个人都需要重命名所有内容,尽管他们可以根据需要提供迁移路径,如下所示:

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

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

The documentation for Qt refers to namespaces, although I didn't check the code to see if they are truly c++ namespaces or a hack with public declarations inside a class. I would guess that the rest is trying to avoid causing everybody to need to rename everything, although they could provide a migration path if they wanted to, like so:

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

#ifndef NO_OLD_DECLS
typedef Qt::Object QObject;
#endif
久隐师 2024-08-10 09:28:52

Qt 对于它使用的 C++ 语言特性非常保守。无命名空间、例外或 RTTI。另请参阅这篇文章,详细说明了为什么在信号/槽处理中不使用模板。

Qt is very conservative on the C++ language features it uses. No namespaces, exceptions or RTTI. See also this article detailing why templates are not used in signal/slot handling.

孤单情人 2024-08-10 09:28:52

鉴于没有一个 C++ 编译器不实现命名空间,现在只有一个原因:品牌:)

Seeing as there's not a single C++ compiler left that doesn't implement namespaces, nowadays there's only one reason: Branding :)

°如果伤别离去 2024-08-10 09:28:52

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

具有以下特征的标识符:

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

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

参考:Qt 编码风格

Qt uses a Q prefix as part of their coding style. It usually serves the purpose of making it easier to read the code and spot what is what.

An identifier that:

  • is prefixed with "Q" and suffixed with "Private" is a private class used for implementation details and is not part of the API (e.g. QPainterPrivate)
  • is prefixed with "Q" and not suffixed with "Private" is a public class (e.g. QWidget)
  • is prefixed with "q" (lowercase) is a public global function (e.g. qRgb)

Adopting a coding style and using it uniformly makes it much easier for other people to understand code they didn't write.

Ref.: Qt Coding Style

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文