代码之家  ›  专栏  ›  技术社区  ›  Piotr Dobrogost

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

  •  10
  • Piotr Dobrogost  · 技术社区  · 15 年前

    我听说QT-API是用相当过时的C++语言编写的。这是真的吗?
    有没有计划让它使用更现代的C++语言?这方面有官方消息吗?

    有没有任何项目可以用更现代的C++来包装当前的QT-API结构?

    使现代化
    这不仅仅是关于模板的问题,也不仅仅是关于当前事态的问题(这就是为什么我用 将来 标签)。

    使现代化
    我特别关注qtapi,因为这是这个框架的用户所使用的。
    在API中使用现代C++语言实现 更强大、更灵活、更易于使用 .
    QT里面使用什么类型的C++对我来说就不那么重要了。

    9 回复  |  直到 15 年前
        1
  •  27
  •   Benoît photo_tom    15 年前

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

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

    编辑: 抱歉,我忘记了Qt提供的模板容器。但Qt的API仍然很少使用模板类。这并不意味着他们不在Qt内部使用它们,也不意味着他们的编码方式已经过时。

    促进信号可能比Qt信号/插槽更强大,但据我所知,使用哪种更简单是没有争议的。一个非常令人信服的执行 KISS principle .

        2
  •  17
  •   mavroprovato    11 年前

    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

        3
  •  11
  •   andre andre    15 年前

    Qt源包含“模板<仅在src/corelib中就有1280次。我不明白这怎么会被误认为是“已知Qt不使用模板”

        4
  •  8
  •   Krsna    15 年前

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

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

        5
  •  6
  •   Sri Sri    15 年前

    直接回答你的问题, Qt的API是 综合的 我很确定他们迟早会推出一个QApp::ParkMyCar()函数。他们有时会采用多种方式来做同一件事,在效率和易用性上有不同的立场。查看他们(优秀的)文档。它同样全面,而且不止一次救了我一命。

    从我看到的Qt源代码来看,该代码非常高效。
    看看安装配置中的功能——您可以打开/关闭对各种功能的支持(包括STL、线程甚至GUI)。此外,当Trolls在Qt4上取得成功时,他们并没有在功能和代码jazz之间进行权衡——他们只是提供了更多这两种功能。考虑到他们的程序员的质量和他们更新主要版本的方式,我认为我们不需要担心Qt(或部分)过时。

    Qt(台式机)的目标市场是生产Hello Kitty台式闹钟的MamaPapa公司,并希望 编码一次 放心吧,它可以在所有“正常”系统上运行——Windows 98及以上版本、流行的Linux发行版和Mac OS X。这意味着要迎合每种系统中所有主要编译器的LCD。如果这意味着将代码中的模板向导保持在最低限度,那就这样吧。

        6
  •  4
  •   Martin Cote    15 年前

    我真的不喜欢Qt实现信号/插槽机制的方式。他们的“MOC”预编译器真的对我来说就像是一个黑客,它甚至不支持标准C++。

    我认为,如果Qt能够使自己现代化,至少使用STL类,那就太好了。Qt在任何可能的情况下(尤其是Boost.Signals)都可以使用Boost,这将是非常棒的。

        7
  •  4
  •   Ariya Hidayat    15 年前

    在整个Qt 4期间。X寿命,我怀疑它有意义重写QT的部分使用,例如“更现代”的C++。这是因为有一个前提,即同一个主要版本的Qt中的所有版本都应该 binary compatible .我们也不能只是过时或弃用客户仍在使用的类(尽管引入新的东西是完全可以的,即使是对于有限的一组受支持的编译器)。

    如果QT 5最终几乎是在门外,而现代C++的构造和特征最终可以在目标支持的平台和编译器中获得,这样做将有助于C++开发者和客户编写更好、更强大的代码,那么为什么不呢?

        8
  •  2
  •   fengshaun    15 年前

    我也不喜欢QT给C++添加巫毒魔法的方式。它使用了这么多宏,它让我非常想知道C。目前,没有什么可以表明Qt会对C++特性更有利。我真的很想看到它更像C++而不是它自己的语言(例如我们为什么需要STD::向量& lt & gt?和qvector & lt;& gt?或qt信号,Booost?信号和SigC++)?

        9
  •  1
  •   ashcatch    15 年前

    Qt是一个库,需要支持多种编译器。例如,它仍然支持MSVC6(不过,我认为Qt软件正在逐步取消对它的支持)。这就限制了现代C++的更多特点,QT是可以使用的。

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