2

我最近对学习Qt重新产生了一些兴趣,但有以下疑问:

Qt 是否有足够多的与 GUI 无关的类?

比如 Python 是“含电池”,.NET 肯定是“含电池”,而且据我所见,Android API 也有很多类来设计和实现应用程序/域逻辑,与视觉呈现。

我问的主要原因是因为我不了解 C++ 并且不打算深入学习它(需要太多时间),所以如果我不得不一直使用第三方 C++ 库并且很难在 Qt 中使用它们项目,这将是一个反对继续前进的强项。

预期用途主要是创建供个人使用的小型桌面应用程序,同时深入了解软件设计的良好实践——我正在慢慢迁移到这个职业。

我已经使用了一些 Python/Pygtk(没有 IDE)和 WPF(在 VStudio/ExpressionBlend 中)。在这两个平台上,我的大部分工作都与科学计算、图像处理和交互式科学可视化有关,并且在 Python(Numpy、Scipy、Matplotlib、Pandas、PIL、cairo)和 .NET(AForge、算法库,System.Media.Media3D)。我想知道 Qt 生态系统在这方面是否如此完整。

4

5 回答 5

4

Qt 本身并不是一门语言,因此您无法将其与 Python 或 .NET 进行比较。话虽如此,Qt 确实提供了通用类,如容器、Unicode 字符串类、字符集编码器/解码器、多媒体、设备和文件 I/O 等。所有这些模块都有完整的文档

还有一些可用于 Qt 的外部模块,例如为技术应用程序提供小部件的Qwt 。

对于其他特定于 Qt 的功能不可用,您显然可以使用另一个合适的库。就像 OpenCV 一样。

哦,你也可以通过PyQt在 Python 中使用 Qt 。

于 2013-07-05T17:45:43.970 回答
2

据我所知,Qt 没有图像处理库。为此,您需要使用 OpenCV 之类的工具。Qt 确实有用于加载最常见图像类型的库。

然而,Qt 确实超越了 GUI 类。

有一个非常方便的数据库模块并发/线程类很好。我很喜欢使用 Qt Networking类。FileIO类没问题

这些类/模块对于制作独立于平台的代码都很有用。图像处理之类的东西主要是算法,并且本质上倾向于独立于平台。所以我认为它们超出了 Qt 框架的范围。然而,简单地找到一个可以满足您需要的库并将其链接到您的项目中应该不会太难。

于 2013-07-05T16:52:02.790 回答
2

heltonbiker 和 Nikos C. 提到的许多 Qt Core 服务都可以被认为是 C++ 的扩展,有点像 std。虽然我自己经常更喜欢 Qt 实现。但是 Qt 在他们的库、I/O 和 Web 服务等方面走得更远……

  • QtXML库提供 XML 文件的读写。传统上我们一直使用 xerces,但 Qt XML 库几乎和 .NET 一样简单。

  • QtNetwork提供 TCP/IP 和其他网络服务

  • QtMultimedia库执行音频和视频内容的播放和录制,以使用相机和收音机等可用设备。

  • QtSQL库与 SQL 数据库接口

    远不止这些。尽管这些可能是最常用的服务。另一个好处是,在大多数情况下,实现是跨平台的。因此,例如使用 I/O 服务不需要您为 Linux 和 Windows 编写单独的代码。这是一般规则,也有例外。但我相信大多数人都会同意他们提供的任何服务都易于使用,并且有据可查。

快乐编码。

于 2013-07-05T19:07:32.477 回答
2

除了 UI 之外,Qt 还提供了充足的抽象——它带有一组功能增强特性,这些特性伴随着某些使用范例。

  • 容器类 - 按值浅拷贝,写入时拷贝
  • 容器和某些数据类型的隐式共享
  • 事件驱动、信号和槽
  • 强大且可用的元系统
  • 特性
  • 许多功能的平台抽象,从文件访问到网络和多线程
  • 跨平台原子(自 C++11 原子以来并不重要)
  • 设置 API
  • 撤消 API
  • OpenGL抽象(不一定是UI,自定义图形)
  • 基本图像格式和基本图像处理
  • Qt 声明式,又名 QtQuick 和 QML 标记(可用于所有类型的结构标记顺便说一句)
  • 动态插件 API
  • 平台抽象和可移植性 - 相同的代码,多个平台
  • 高级和低级多媒体 - 音频、视频
  • 传感器和串口
  • 单元测试
  • XML、JSON、SQL
  • 过时且希望很快更新的 OpenCL 抽象
  • 最后但并非最不重要的一点是,围绕 Qt 构建的许多第 3 方模块适用于广泛的应用程序

老实说,它所缺少的只是支持一些更流行的文件格式、媒体编码/解码和容器、一些并行和矢量抽象、USB、WIFI/NFC(在插件模块中工作),它将是 100% 通用的。

请注意,您也可以将 Python 与 Qt 一起使用,尽管我没有这方面的经验,但 Qt 是一个非常通用的工具,可以快速轻松地进行应用程序开发 - 由于 5.1 几乎支持整个市场,还增加了 Android 和 iOS到支持的平台列表。它对于创建用于创意或研究目的的自定义使用应用程序非常有用。

尽管不是对每项任务都完美,但 Qt 很容易成为您在这方面可以使用的“最好的”工具。在可移植性和非常彻底的方面无与伦比,即使它提供的功能集有点臃肿。最后,它是免费的,你甚至可以在 LGPL 下开发商业应用程序,只要你动态链接。总而言之,值得投资学习,唯一的缺点是它在旧的 C++ 原生 API 和 QML 运行时之间缺乏统一性,QML 运行时正在积极开发并基于 JS,因此 API 有点不同和将 C++ 与 JS 和 QML 融合需要一些胶水 API。

于 2013-07-05T19:07:42.970 回答
1

(仅作记录,来自官方网站):

基础:Qt 核心模块

Qt Core 模块构成了所有基于 Qt 的应用程序的基础,其中包含其他模块使用的核心非图形类。

主要功能

  • 文件 IO、事件和对象处理
  • 多线程和并发
  • 插件、设置管理
  • Signals and Slots 对象间通信机制

好处

  • 通过利用一整套应用程序构建块来减少开发时间和成本
  • 使用跨平台功能从头开始开发可移植代码
于 2013-07-05T17:44:23.063 回答