# Qt与C++

Qt是一个C++工具包,它带有QML和Javascript的扩展。 Qt中存在与许多语言的绑定,但Qt本身是用C++开发的。 C++的灵魂可以在整个类中找到。 在本节中,将从C++的角度来看Qt,以更好地理解如何使用使用C++开发的本地插件来扩展QML。 通过C++,它可以扩展和控制提供给QML的执行环境。

image

本章将和了解Qt一样,要求读者具备一定的C++基本知识。 Qt不依赖于高级的C++特性,通常认为C++的Qt风格非常易读,所以如果觉得自己的C++知识不太牢靠,也请不要担心。

# Qt C++

从C++方向接近Qt,会发现Qt通过提供内省数据来丰富C++的许多现代语言特性。 这可以通过使用QObject基类来实现。 内省数据或元数据在运行时维护类的信息,这是普通C++所不具备的。 这使得动态探测对象以获取有关其属性和可用方法等详细信息的信息成为可能。

Qt使用此元信息来启用使用信号和槽的非常松散绑定的回调概念。 每个信号都可以连接到任意数量的插槽甚至其他信号。 当从对象实例发出信号时,将调用连接的槽。 由于信号发射对象不需要知道任何关于拥有槽的对象的信息,反之亦然,这种机制可用于创建高度可重用的组件,并且这些组件间的依赖关系非常少。

# Qt for Python

内省功能还可用于创建动态语言绑定,从而可以将C++对象实例暴露给QML,并可以从Javascript中调用C++函数。 还存在其他的Qt C++的绑定,除了标准的Javascript绑定之外,官方还有被称为PySide6 (opens new window)的Python绑定。

# 跨平台

除了这个中心概念之外,Qt还使使用C++开发跨平台应用程序成为可能。 Qt C++在不同的操作系统上提供了一个平台抽象,它允许开发人员专注于手上的任务,而不是专注于如何在不同操作系统上打开文件的细节。这意味着可以为Windows、OS X和Linux重新编译相同的源代码,并且Qt负责不同操作系统上处理某些事情的方式。最终的结果是本地构建的应用程序具有目标平台的观感。由于移动设备是新一代桌面,较新的Qt版本也可以针对多个移动平台使用相同源代码,例如这些移动平台包括:iOS、Android、Jolla、黑莓、Ubuntu手机、Tizen。

在重用方面,不仅源代码可以重用,开发人员的技能也可以重用。一个了解Qt的团队可以延伸到更多的平台,而不只是一个只专注于单一平台特定技术的团队,而且由于Qt非常灵活,团队可以使用相同的技术创建不同的系统组件。

对于所有平台,Qt提供了一组基本类型,例如具有完整Unicode支持的字符串、列表、向量、缓冲区等。它还为目标平台的主循环提供通用抽象,并提供跨平台的线程和网络支持。基本的思想是,对于应用程序开发人员来说,Qt包含了所有必需的功能。对于特定领域的任务,例如与本地库的接口,Qt提供了几个帮助类来简化此操作。

最后更新: 2/3/2022, 4:21:42 PM