Qt, QML, Widgets…有什么区别?#
如果你是Qt的新手,可能会对已读到的所有概念感到有些困惑。本部分旨在总结与开发Qt应用相关的所有关键组件。
请记住,Qt是用C++设计和编写的,作为一个C++框架,你将发现许多基于C++的应用程序中的参考、示例和概念,这些在Python应用程序中可能不相关,但请记住,Qt for Python旨在通过许多适配来将Qt框架暴露给Python。您不需要知道C++就能使用Qt for Python,您可以在之后找到这些语言之间的所有可能的组合。
Qt#
Qt项目是一个开源协作,负责协调Qt框架的开发。您可能会遇到“Qt”指代项目的情况,也可能指代框架。
作为框架,Qt拥有许多组件,这些组件通过组件和模块分发,例如:qtbase是包含许多模块的基本组件,如:QtCore、QtGui、QtWidgets、QtNetwork等。所有这些模块都包含了您可以直接使用的许多类,例如:从QtCore模块中您可以找到QFile、QTime、QByteArray等类。
您可以使用这些类创建无用户界面的应用程序,同时创建命令行应用程序、处理文件、网络连接、正则表达式、文本编码等。
另一方面,您可以使用QtWidgets模块中的类创建图形应用程序,这也被称为Widgets
。
Qt还有许多其他模块,如QtMultimedia、QtCharts、Qt3D等。这些模块具有特定功能,并在这些模块中,有一个名为QtDeclarative的模块,其中可以找到QML声明性语言的实现。这种语言类似于CSS和JSON,它的创建是为了声明性设计UI应用程序,允许JavaScript处理一些命令性部分,并使其他组件能够扩展并使用C++连接代码。
让我们分别检查这些不同方法的功能。
Widgets#
如前所述,QtWidgets
是一个模块,提供预定义的控件,可以将它们添加到你的图形应用程序中,比如按钮、标签、盒子、菜单等。
基于控件的应用程序将类似于原生应用程序,因为目标是不影响用户体验,与其他包含的应用程序相比。
注意
您可以将这些应用程序调整为自己设计的风格,但需要注意,控件的目标是尊重系统样式,更改颜色时要小心。请查看这个简单教程了解如何操作。
QML#
与控件相比,QML 提供了一种不同的方法来创建用户界面,最初是从移动应用程序开发中得到的启发。与 Qt Quick
模块一起,它提供了使用点击、拖放、动画、状态、转换、抽屉菜单等操作与移动设备交互的能力。
在 QML/Quick 应用程序中可以发现元素,它们专注于提供更动态的应用程序基础设施,其不同属性基于某些行为。
尽管 QML 有为移动设备提供界面的动机,但您也可以将其用于桌面应用程序。
此外,您可以使用标准的 JavaScript 增强您的应用程序,结合 C++,可以成为一个有吸引力的基础设施。
Python 和 C++#
对于 Qt for Python 应用程序,您不需要了解 C++,但在一些不同的使用场景中,可以混合这两种语言。
如果您有 Qt/C++ 应用程序,您可以将其重写为 Qt/Python 应用程序。这意味着 Python 的目的是完全替换 Qt 应用程序的 C++ 代码的用户级别代码。
对于用 C++ 编写的自定义 Qt 控件,您可以生成自己的 Python 绑定,以便人们可以直接从 Python 使用它。
如果您有负责特定任务(例如高性能进程)的 C++ 基础库,您可以为它生成绑定,以便人们可以从 Python 使用它。
对于 Qt/C++ 应用程序,您可以通过将主 QApplication 单例作为 Python 绑定向 Python 解释器开放来使用 Python 进行扩展。这可以理解为您 Qt/C++ 应用程序的“Python 插件系统”,例如。
对于步骤 2.、3. 和 4.,您需要 Shiboken 的帮助,这是 Qt for Python 使用的绑定生成工具。您可以在文档页面上找到更多信息。