Qt中使用的C ++语言有多现代?

时间:2009-05-10 20:07:54

标签: c++ api qt

我听说Qt API是用过时的C ++语言编写的。这是真的吗? 有没有计划让它使用更现代的C ++语言?有关于此的官方信息吗?

是否有任何项目旨在用更现代的C ++包装当前的Qt API结构?

UPDATE
这个问题比模板更重要,这不仅仅是关于当前事态的问题(这就是我用 future 标签标记它的原因)。

UPDATE
我特别关注Qt API,因为这是该框架的用户使用的。
在API中使用现代C ++语言使其更强大,更灵活,更易于使用 在Qt中使用什么样的C ++对我来说重要得多。

9 个答案:

答案 0 :(得分:27)

众所周知,Qt不使用模板,这是一个非常有用的现代c ++功能。但这并不意味着需要Qt API的包装器。 Qt使用内部预编译器来解决相同的问题。有些人不喜欢这种方法,但Qt的API非常简单有效,我不相信真正需要对其进行现代化。 特别是,信号和插槽,Qt的一个非常令人印象深刻的功能,可以使用模板实现(参见boost.signals库),但Qt实现它的方式仍然更有效。

我会说“别担心并按原样使用Qt”。

编辑: 对不起,我忘记了Qt提供的模板容器。但是,Qt的API很少使用模板类。这并不意味着他们不会在Qt中使用它们,或者它们的编码方式已经过时了。

Boost.Signals可能比Qt信号/插槽更强大,但据我所知,没有争论哪个更容易使用。一个非常有说服力的KISS principle实现。

答案 1 :(得分:17)

Qt使用C ++语言的现代变体 - 目前是C ++ 98,是模板也适用于适用的地方。 Qt对STL有一些支持。参见例如http://qt-project.org/doc/qt-5.1/qtcore/containers.html - 和便利功能,例如的std :: string。这些都在文档中:http://qt-project.org/doc/qt-5.1/qtdoc/index.html;)关于模板与moc的问题是我们经常得到的问题,我们已经将它添加到我们的文档中; http://qt-project.org/doc/qt-4.8/templates.html

答案 2 :(得分:12)

Qt来源包含“模板<”模式仅在src / corelib中1280次。我没有看到这怎么会被误认为“Qt已知不使用模板”

答案 3 :(得分:9)

与Boost.Signals不同,Qt通过使用排队连接实现信号/插槽是线程安全的。然而,在2009年5月2日,Boost.Signals2被发布并带来了非常期望的线程安全性。从开发人员的角度来看,Qt的信号/插槽实现更容易使用,主要是因为它不使用模板。深入了解为什么Qt使用moc代替信号和插槽的模板,here's a page来自他们的文档。

对于那些想知道为什么Qt有自己的容器类的人,我很确定主要动机是提供隐式共享。所有容器类都是隐式共享的,因此每当复制QList时,只复制指向数据的指针。有关Qt中浅层复制的更多信息,请参阅here

答案 4 :(得分:6)

直接回答你的问题, Qt的API是全面的。我很确定他们会在一段时间内推出QApp :: ParkMyCar()函数。他们有时会采用多种方式来做同样的事情,在效率和易用性方面有不同的立场。查看他们的(优秀)文档。它是如此全面,并且不止一次地拯救了我的屁股。

从我所看到的Qt源代码来看,代码非常高效 看一下安装配置中的功能 - 您可以打开/关闭对各种功能的支持(包括STL,线程甚至GUI)。此外,当Trolls将Qt 4打造成时,他们并没有在代码爵士乐中交换功能 - 他们只是提供了更多的功能。鉴于程序员的质量和更新主要版本的方式,我认为我们不必担心Qt(或部分)过时。

Qt的目标市场(台式电脑)是制作Hello Kitty桌面闹钟的MamaPapa公司,并希望 Code 并确保它在所有“理智”系统上运行 - Windows 98和上面,流行的Linux发行版和Mac OS X.这意味着迎合各种系统中所有主要编译器的LCD。如果这意味着将代码中的模板向导保持在最低限度,那就这样吧。

答案 5 :(得分:4)

我真的不喜欢Qt设法实现其信号/插槽机制的方式。他们的'moc'预编译器真的闻起来像是一个黑客,它甚至不支持标准的C ++。

我认为,如果Qt能够使自己现代化以至少使用STL类,那将会很棒。真正令人敬畏的是Qt尽可能使用Boost(尤其是Boost.Signals)。

答案 6 :(得分:4)

在整个Qt 4.x生命周期中,我怀疑重写部分Qt是否有意义,例如“更现代”的C ++。这是因为前提是同一主要版本的Qt中的所有版本仍应为binary compatible。我们也不能仅仅淘汰或弃用客户仍在使用的类(尽管引入新内容非常方便,即使对于一组有限的支持编译器也是如此)。

如果最终Qt 5几乎完全脱离了大门,现代C ++构造和功能最终可以在目标支持的平台和编译器中使用,这样做将有助于C ++开发人员和客户编写更好,更强大的代码,然后为什么不呢?

答案 7 :(得分:2)

我也不喜欢Qt为C ++添加伏都教魔法的方式。它使用了很多宏,它让我想起了C.目前,没有任何迹象表明Qt将来会对C ++功能更加友好。我真的希望看到它更像是C ++而不是它自己的语言(例如为什么我们需要std :: vector<>和QVector<>?或Qt信号,Boost.Signals和sigc ++?)

答案 8 :(得分:1)

Qt是一个库,需要支持各种编译器。它仍支持MSVC6,例如(我认为Qt软件正在逐步取消对此的支持)。这限制了Qt能够使用的更现代的C ++特性。

但这并不意味着你不能在你的Qt程序中使用它们。