Qt 社区在 Qt Wiki(https://wiki.qt.io/) 中收集和展示了有关 Qt 的大量权威、实用的信息。“一般来说,Qt中的 Wiki 曾被用作存储知识的地方。换句话说,所有不完全静态(应在网页上)或文档(应在文档中)的东西都已放入 Wiki 中。Wiki 应该是社区查找和存储更改信息的地方。”
“也许在幻想/科幻世界中采用的是一个很好的方法。存在佳能(在我们的案例中是文档和项目代码),并且尚未被规范或将不会被规范,但是很重要。Wiki 应该是地方稍后,需要大量材料来解释 Qt,而 Wiki 是实现这一点的地方。
1 什么是 Qt
Qt 是用于桌面(desktop),嵌入式和移动设备的跨平台应用程序开发框架。支持的平台包括 Linux,OS X,Windows,VxWorks,QNX,Android,iOS,BlackBerry,Sailfish OS等。
Qt 本身并不是一种编程语言。它是用 C++ 编写的框架。预处理器 MOC (Meta-Object Compiler)(元对象编译器)用于通过 signals and slots 等功能扩展 C++ 语言。在编译之前,MOC 将解析使用 Qt 扩展 C++ 编写的源文件,并从中生成符合标准的 C++ 源。因此,框架本身和使用它的应用程序/库可以由任何符合标准的 C++ 编译器(如Clang,GCC,ICC,MinGW 和 MSVC)进行编译。
2 Build System
尽管 Qt 可以使用任何构建系统,但是 Qt 带有自己的 qmake。它是平台本地构建系统(如GNU Make,Visual Studio 和 Xcode)的跨平台前端。
CMake 也是构建 Qt 项目的流行替代方法,Qt 4 支持已在几年前集成,而 Qt 5 则提供了早期支持。
最近有一位新玩家加入了该游戏:The Qt Build Suite 又名 Qbs。Qbs 是基于 QML 的构建系统,还提供对 Javascript 的支持。该构建系统不仅提供构建功能,而且还提供像 cmake 一样的包装。
3 IDE
Qt 带有自己的名为Qt Creator 的集成开发环境(IDE)。它可在Linux,OS X 和 Windows 上运行,并提供智能代码完成,语法突出显示,集成的帮助系统,调试器和分析器集成,以及与所有主要版本控制系统(例如 git,Bazaar)的集成。除了 Qt Creator,Windows 上的开发人员还可以使用 Qt 的 Visual Studio 加载项。也可以使用其他IDE(例如 KDE 上的 KDevelop)。但是,当然根本不强制使用任何 IDE。
4 国际化和本地化
Qt为国际化( internationalization,即 i18n)和本地化(localization,即 l10n)提供了出色的支持。Qt Linguist 工具及其配套的 lupdate,lrelease 和 lconvert 可以轻松地将应用程序翻译为语言环境。Qt 支持当今使用的大多数语言和书写系统。
5 Widgets
使用 Qt,可以使用其 Widgets 模块直接用 C++ 编写GUI。Qt 还带有一个称为 Qt Designer 的交互式图形工具,该工具可用作基于Widget 的 GUI 的代码生成器。Qt Designer 可以独立使用,也可以集成到 Qt Creator 中。
6 QtQuick
用 Qt 编写 GUI 的另一种方法是使用 QtQuick 模块。使用 QtQuick 的 GUI 用 QML 编写。QML 是一种声明性对象描述语言,它集成了 Javascript 以进行过程编程。QtQuick 为使用 QML 进行 GUI 开发提供了必要的模块。可以只用 QML 编写整个应用程序,但是通常只有 GUI 用 QML 编写,而应用程序的后端是用 C++ 实现的(请参阅 Integrating QML and C++)。Qt Creator 还具有集成的 QtQuick GUI 设计器和分析器。
7 更多模块
Qt 不仅仅是一个 GUI 工具包。它为网络,数据库,OpenGL,Web 技术,传感器,通信协议(蓝牙,串行端口,NFC),XML 和 JSON 处理,打印,PDF 生成等领域的跨平台开发提供模块。
有关官方 Qt 模块的完整列表,请参见Qt文档中的 All Modules 页面。
另外,请参阅 Inqlude.org 以获取基于 Qt 的第三方模块列表,以用于 Qt 项目。
8 语言绑定
尽管使用 Qt 的应用程序通常是用 C++ 编写的,但存在与其他语言的 QML 绑定。这些不是 Qt 的一部分,而是由各种第三方提供的。例如,Riverbank Computing 提供了商业和免费软件 Python 绑定(PyQt)。 有关更多语言绑定,请参见 Category:LanguageBindings。