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 小部件的命名约定的主要内容,如果未能解决你的问题,请参考以下文章