Qt除了与GUI相关的类之外还有通用类吗?

时间:2013-07-05 16:36:19

标签: qt

我最近对学习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, alglib,System.Media.Media3D)。我想知道Qt生态系统在这方面是否如此完整。

5 个答案:

答案 0 :(得分:4)

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

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

对于没有Qt特定内容的其他功能,您显然可以使用其他适当的库。像OpenCV一样。

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

答案 1 :(得分:2)

据我所知,Qt没有图像处理库。为此,您需要使用类似OpenCV的东西。 Qt确实有用于加载大多数常见图像类型的库。

但是,Qt确实超越了GUI类。

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

这些类/模块对于制作与平台无关的代码都很有用。像图像处理这样的东西大多是算法的,并且本质上倾向于与平台无关。所以我认为它们不属于Qt框架的范围。但是,简单地找到一个可以满足您需求的库并将其链接到您的项目中应该不会太困难。

答案 2 :(得分: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编写单独的代码。这是一般规则,也有例外。但我相信大多数人会同意他们提供的任何服务都易于使用,并且有详细记录。

快乐的编码。

答案 3 :(得分:2)

除了用户界面之外,Qt还提供了充足的抽象功能 - 它带有一系列功能增强功能,并附带某些使用范例。

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

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

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

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

答案 4 :(得分:1)

(仅供记录,来自official site):

  

基金会:Qt核心模块

     

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

     

关键功能

     
      
  • 文件IO,事件和对象处理
  •   
  • 多线程和并发
  •   
  • 插件,设置管理
  •   
  • 信号和插槽对象间通信机制
  •   
     

<强>优势

     
      
  • 利用一整套应用程序构建块减少开发时间和成本
  •   
  • 使用跨平台功能从头开发可移植代码
  •