Qt被归类为C++库吗?如果不是库,你会如何分类QT?

13
我最近开始研究Qt(我安装了Qt 4.5.2并安装了他们的Eclipse-CDT插件“qt integration v1.5.2”,将在Linux-Eclipse-CDT-QTintegration中进行所有开发)。
起初我认为Qt是一个纯粹的C++库,但当我安装并运行Qt示例代码时,我看到了许多我认为是非标准的“怪异”东西。
我的目标是以高度抽象的方式理解:
  • Qt被归类为C++库吗?
  • 如果不是库,你会如何分类Qt(类比/隐喻将不胜感激)?
3个回答

33

Qt是一个框架,不是一个库。这不是编程语言强制执行的明确区分,而是描述了代码的设计和意图:

是别人写好的用于你的代码的代码。使用库意味着你的应用程序保持原样,只是有另一个库来帮助它。

框架是别人的代码,你的代码适合其中。使用框架意味着框架定义了应用程序的结构。

如果你在使用一个框架,你需要学习该框架的约定,这可能与基础语言有所不同;否则,你可能会花费很多时间去抵抗框架,并且你将错过一些框架所提供的东西。

特别地,Qt看起来并不像直接的C++,因为它并不是直接的C++。它添加了有限的扩展来允许信号和槽等功能,这些扩展使用Qt的moc实现,其作为C++预处理器。欲了解有关Qt对C++的扩展的更多信息:


1
不,QT不是一个框架。除了典型的GUI事件处理之外,它没有控制流的反转。QT是一个扩展语言库。 - Lothar
我同意@Lothar的观点,假设我使用Qt“框架”创建了Android应用程序。我的应用程序将是一个“.so”库,并将包含在模板Android项目中。因此,我的整个Qt应用程序适合于Android框架,并且我的应用程序正在使用其他人的代码(Qt库)。这样正确吗? - peco

4

Qt是一组C++库,与预处理器和构建系统的部分相结合。


1
+1也可以被视为一个“开发平台”,这意味着您可以从Qt提供的库中构建整个应用程序。 - Shaun

4
大多数图形用户界面(GUI)框架/库都会添加到语言中,只是因为C++原生不支持GUI所需的事件类型(直到最近才开始支持)。

Qt选择使用语言扩展和预编译器来实现此功能,而MFC和wxWidgets则使用C宏和C预处理器。Qt的方法意味着它可以做更多的事情(它不受cpp宏语言的限制),但建立环境会稍微复杂一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接