Qt概述
Qt是一个跨平台的 C++ 应用程序开发框架
具有短平快的优秀特质:投资少、周期短、见效快、效益高。
几乎支持所有的平台,可用于桌面程序开发以及嵌入式开发
有属于自己的事件处理机制
可以高效率地开发基于窗口的应用程序
Qt 是标准 C++ 的扩展,C++ 的语法在 Qt 中都是支持的
良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,可以快速上手
Qt 提供了一种称为 signals/slots 的安全类型来替代 callback(回调函数),这使得各个元件 之间的协同工作变得十分简单。
Qt特点
Qt广泛用于开发 GUI 程序,也可用于开发非 GUI 程序。
GUI = Graphical User Interface
也就是基于窗口的应用程序开发
有丰富的 API
Qt 包括多达 250 个以上的 C++ 类
可以处理正则表达式
支持 2D/3D 图形渲染,支持 OpenGL
Qt 给程序猿提供了非常详细的官方文档
支持 XML,Json
框架底层模块化, 使用者可以根据需求选择相应的模块来使用
可以轻松跨平台
和 Java 的跨平台方式不同
在不同的平台使用的是相同的上层接口,但是在底层封装了不同平台对应的 API
Qt模块
Qt的模块分为以下几类:
Qt基本模块: 提供了Qt在所有平台上的基本功能
Qt 附加模块: 实现一些特定功能的提供附加价值的模块
增值模块: 单独发布的提供额外价值的模块或工具。
技术预览模块: 一些处于开发阶段,但是可以作为技术预览使用的模块
Qt 工具: 帮助应用程序开发的一些工具。
Qt窗口类
Qt常用的窗口类有3个: QWidget,QDialog,QMainWindow
创建窗口的时候,需要继承它们中的其中一个。
QWidget: 是所有窗口类的基类,Qt 中的控件也属于窗口,基类都是 QWidget
可以内嵌到其他窗口中:没有边框
可以不内嵌单独显示:独立的窗口,有边框
QDialog: 对话框类,不能内嵌到其他窗口中
QMainWindow: 有工具栏,状态栏,菜单栏,
不能内嵌到其他窗口中
Qt窗口有内嵌和非内嵌窗口
内嵌窗口: 依附于一个大窗口,作为其一部分,成为其子窗口,父窗口显示的时候它就被显示
非内嵌窗口: 有边框,有标题栏,需要调用函数才能显示
坐标体系
Qt中窗口的位置是根据坐标确定的,所有的坐标都要先找到坐标原点,Qt的坐标原点就在左上角,其中x轴向右递增,y轴向下递增
相对坐标
Qt每个窗口都有自己的坐标原点,子窗口使用的坐标点就是父窗口坐标体系中的坐标点,也就是子窗口的位置是通过父窗口的原点确定的。
垃圾回收机制
Qt 引入对象树的概念,在一定程度上解决了内存问题。
当一个 QObject 对象在堆上创建的时候,Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。
任何对象树中的 QObject 对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的 children () 列表中删除;如果有孩子,则自动 delete 每一个孩子。Qt 保证没有 QObject 会被 delete 两次,这是由析构顺序决定的。
Qt中有垃圾回收机制,但不是所有被new出来的对象被自动回收,满足以下两个条件才可以回收
创建的对象必须是QObject类的子类或间接子类
创建出的类对象,必须指定其父对象