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

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

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

有什么建议吗?

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

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

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

【问题讨论】:

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

标签: c++ qt coding-style widget


【解决方案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 是否会给它一个值?称其为“自动生成”或“默认”值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-01
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          • 2012-01-30
          • 1970-01-01
          • 2011-04-06
          • 2011-08-08
          相关资源
          最近更新 更多