Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的课程名称是否应该以';Q';在Qt?_C++_Qt_Qt4_Qt Creator - Fatal编程技术网

C++ 我的课程名称是否应该以';Q';在Qt?

C++ 我的课程名称是否应该以';Q';在Qt?,c++,qt,qt4,qt-creator,C++,Qt,Qt4,Qt Creator,当我第一次开始使用Qt时,每个类都有一个以“Q”开头的名称,这让我非常恼火,但现在我已经习惯了 我使用的是Qt Creator,它可以很好地突出显示代码。 但是,它只突出显示以“Q”开头的类名。它突出显示以“Q”开头的所有内容,即使没有这样的类型。 它不会突出显示自定义类名 这让我想知道,我的所有类名是否也应该以“Q”开头? 或者至少是可重复使用的? (我的意思是,我把它们放在类库中,或者在另一个应用程序中重用。) 我见过好几个地方,他们用这种方式给班级命名。这是件好事吗 我发现了Qt的命名约定

当我第一次开始使用Qt时,每个类都有一个以“Q”开头的名称,这让我非常恼火,但现在我已经习惯了

我使用的是Qt Creator,它可以很好地突出显示代码。
但是,它只突出显示以“Q”开头的类名。它突出显示以“Q”开头的所有内容,即使没有这样的类型。
它不会突出显示自定义类名

这让我想知道,我的所有类名是否也应该以“Q”开头?
或者至少是可重复使用的?
(我的意思是,我把它们放在类库中,或者在另一个应用程序中重用。)

我见过好几个地方,他们用这种方式给班级命名。这是件好事吗

我发现了Qt的命名约定,但它没有处理这个问题

另外,我不明白为什么Qt不使用名称空间

编辑:

非常感谢所有和我分享想法的人

编辑2:


Qt Creator的较新版本现在似乎也突出显示了不以“Q”开头的类名。很好

就个人而言,我不会给自己的类加前缀。由于Qt有很多东西(字符串、列表等)都有自己的实现,所以了解您正在使用的东西很有帮助

正确的方法是使用名称空间。我认为Qt没有使用它们,因为它太旧了。最近C++发生了很大变化。


一般来说,根据语法着色调整命名约定是一个坏主意(即使我知道这只会让你对命名感到好奇)。

我不明白你为什么要在自己的类上强制这样做。让Qt用它的类命名约定做它想做的事情,你自己做。

使用你自己的编码约定和标准,它不必匹配你正在使用的库。我不认为Qt的制造商暗示你要遵循他们的风格惯例

我没有使用过Qt,但除非您实际扩展了Qt的某些部分,否则我认为在您自己的类前面加上Qt是一个非常糟糕的主意,特别是因为您从Qt创建者报告的(IMO)perculiar行为

用前缀将相关类分组是很常见的,但现在这种方法已经过时了。一个更好的方法是使用名称空间——这有一个好处,即允许范围限定,而一个简单的前缀不会给你

如果您确实使用名称空间,请确保您的名称空间与您正在编写的代码区分开来,例如不要使用

Qt::MyClass theClass;
使用


我相信你明白了。你可能还想看看QtCreator,然后把编辑器(或者整个井手)换成一个更能强调C++代码的东西。< /P> < P>嗯,我来做这件事。我尝试过,但通常都失败了,但无论如何,我觉得还是值得尝试的,让我的大部分代码不知道我在使用什么UI框架。特别是对于自定义小部件的绘图操作,如果我以后从WX切换到Qt,我希望它们能够再次工作。因此,我有自己的设备上下文,这是我所需要的抽象。然后我有一个特定于WX的device_context版本,它可以进行wxDC-draw调用并保存一个wxDC*

当然,你会认识到这是桥型

那么我给事物起什么名字呢?好吧,没有理由命名device_context wx_device_context,因为我很可能在和Qt说话。我试图在代码中隐藏wx,记得吗

但是!代表我的客户机创建的WX特定子类名为WX_device_context,它实际上驻留在为这种目的而创建的WX名称空间中

这对你有什么影响?好吧,如果你想给一个类命名为QSomething,那么你可能正在创建一个定制的东西或其他以特定方式与Qt相关的东西。您是否可以通过子类化来隐藏这一事实,提供一个客户端可以使用的、与UI库无关的接口?您正在制作的小部件可以这样制作吗?如果您决定需要使用其他UI库,您是否陷入困境,或者您是否可以简单地覆盖一些基本结构,以便您的自定义小部件与新库一起工作


P>这一点是,你对一个类QA的诱惑是一种“嗅觉”——尽管它通常被发现和普遍容忍——而且你可能想考虑它所指示的和你能做的,如果有的话,关于名称空间和Qt,QT确实使用命名空间,而不是对所有事物都使用名称。Qt在许多系统上运行,但并非所有系统都完全支持名称空间。虽然Qt有最新版本,但这并不意味着它运行的所有系统都已更新。考虑到目前使用Qt的代码数量,转换所有内容将是一项艰巨的任务;假设Qt运行的所有编译器/平台/系统都不需要经过处理就可以将所有内容移动到名称空间中


Qt不需要名称空间,它们有一个有效的命名方案。因为使用Qt而想用Qt的方式命名类,就像因为使用Qt而想把类放在Qt命名空间中一样。我同意诺亚的观点,想要这样做是一种“气味”,尽管人们普遍容忍,但这仍然不是一个好的举动。有时模仿并不是最真诚的恭维。

如果你正考虑在你的类前面加上“Q”前缀,只是为了让Creator为你突出显示它们,那么你可能需要更新到Creators master分支

Creator使用了“Q hack”,因为一直查找所有内容非常昂贵。同时,C++引擎得到了显著的改进,这些查询可以在不降低UI的情况下完成,所以最近对各种类型的高亮显示都被激活了。
不幸的是,这一更改将不再适用于Qt Creator 2.0,因此此时您需要使用快照或自己构建整个内容。

您知道Qt为什么不使用名称空间吗,
venemo::MyClass theClass;