Qt 小部件的命名约定

Posted

技术标签:

【中文标题】Qt 小部件的命名约定【英文标题】:Naming convention for Qt widgets 【发布时间】:2008-12-30 23:36:45 【问题描述】:

我正在与一群其他程序员合作开发一个使用 C++ 和 Qt 构建的开源项目。

现在,我们需要一个小部件(以及其他一般变量)的命名约定,以便在我们的所有代码中将其用作标准,这样代码就具有更好的可读性,并且我们可以更好地协调程序员。

有什么建议吗?

编辑:我不是在谈论命名新类,

我说的是 Qt Widgets 的命名实例,假设我有一个用户名的文本编辑,我应该将其命名为 txtEdtUsrNm 吗?

在这种情况下,我应该如何选择派生?

【问题讨论】:

缩小这个问题的范围。我会回答它,但它需要一页又一页。你是指班级水平吗?功能层面? UI 生成的小部件? 另外,您从单词中删除内部元音作为命名方案的示例是可怕的。用那种风格阅读代码会让我发疯。 【参考方案1】:

只要您按照这些思路思考,我就会从头到尾阅读这篇 QtQuarterly 文章。

Designing Qt-Style C++ APIs

也就是说,我们要做的一件事是将实例的“使用”作为第一部分,将类的最后一个完整单词作为最后部分。

所以,你的“用户名”QTextEdit 是

QTextEdit * userNameEdit = new QTextEdit(this);

如果有歧义,比如 QListView 和 QTreeView,选择最后一个不明确的部分。

QListView * userListView;

您可以根据自己的喜好找出缩写词(例如 QLabel 的“Lbl”),但一般来说,整个单词都有效且易于阅读。

另一方面,我们对此并不太严格,在没有类名的情况下命名实例变量的意图可能更重要,因为如果将来你想更改类,你可以更改名称,在没有好的重构工具的情况下,这很痛苦。

也许找出您最常使用的通用小部件,并为最通用的超类选择一个命名约定,然后让其他一切都过去。

遵守约定的示例列表:

layout = 所有以 “布局”并继承QLayout button = 以“Button”结尾并继承 QAbstractButton 的所有类

QAbstractClassName 类是思考该列表中应该包含什么内容的好地方。

【讨论】:

【参考方案2】:

由于 Qt 对第三方开发者开放,他们提供了一些关于编码风格和 API 设计原则的文档。

这些文件真的很有趣。这里有几个链接:

Wiki : Qt Coding Style

Wiki : Api Design Principles

还有这份来自 Jasmin Blanchette 的文档 (PDF),值得一读:Little Manual of API Design

【讨论】:

【参考方案3】:

我会使用与 Qt 相同的命名约定。让自己轻松一点。

它们的命名约定类似于java。

【讨论】:

【参考方案4】:

全名很快就会变得难以阅读和输入,因此我们通常使用缩写:

QLabel * fooLB;
QPushButton * fooPB;
QTextEdit * fooTE;
QSpinBox * fooSB;

(你明白了)。是的,有一些模棱两可的地方,但它们通常是根据上下文来解决的。

【讨论】:

我发现 fooPB 的可读性、可理解性和可写性不如 fooButton。程序员大部分时间都不是写作,而是阅读和思考。【参考方案5】:

确切地说,问题是关于“命名 Qt 小部件的实例”,但答案是关于命名保存对小部件实例的引用的变量。

Qt Widgets 派生自 QObject,它有一个带有 getter objectName() 的 name 属性。如果程序员不给这个属性一个值,Qt 是否会给它一个值?称其为“自动生成”或“默认”值。

【讨论】:

以上是关于Qt 小部件的命名约定的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 jquery 小部件上使用啥命名空间?

嵌套小零件的 BEM 命名约定

Qt 在另一个小部件中调整小部件的大小

qt - 在父窗口/小部件类中初始化子小部件的目的是啥?

具有单独布局的嵌套 Qt 小部件

具有重叠子小部件的 Qt 自定义小部件