Qt是什么?认识qt

一.Qt是什么

Qt是一个跨平台的C++图形用户界面库,目前包括Qt Creator、Qt Designer等等快速开发工具。Qt支持所有Linux/Unix系统,还支持windows平台。Qt很容易扩展,并且允许真正地组件编程。Qt与GTK、MFC、OWL、ATL是一样的图形界面库。

二.Qt的优势

优良的踏平台特性
面向对象
丰富的APl(Qt包括250个以上C++的类、还提供基于模板collections、file、serialization等)
支持3D/2D图形渣染,支持OpenGL
XML支持/大量的开发文档

三.使用Qt开发的应用软件

使用Qt开源软件库相关市场软件产品如下:
Emergent (神经网络模拟器)、eav (linux版QQ聊天软件)、Google地球(google earth)(三维虚拟地图软件)、VLC多媒体播放器 (一个体积比较小巧、功能强大的开源媒体播放器)、极品飞车 (EA公司出品的著名赛车类游戏)、WPSoffice (金山软件公司所推出的办公软件) 等等。

四.Qt开发工具详解

Qt开发工具包含Qt Creator、Qt Designer、Qmake、Qt Assistant、Qt Linguist。
1、Qt Creator:用于Qt开发的轻量级跨平台集成开发环境;
2、Qt Designer:强大的拖电式图形化用户界面排版和设计工具;
3、Qmake:跨平台makefile生成器;
4、Qt Assistant:可定制可重发布的帮助文件和文档阅读器;
5、Qt Linguist:整套工具,支持对Qt应用作快捷无误的翻译,是一组能理顺国际化工作流的工具。

五.Qt跨平台框架结构

Qt跨平台框架对应模块: Qt基础模块和Q扩展模块
Qt基础模块:Qt core、Qt Gui、Qt Multimedia、Qt Network、Qt Qml、Qt Quick、Qt
SQL、Qt Test、Qt Webkit。
Qt扩展模块:Qt 3D、Qt Bluetooth、Qt Contacts、Qt Concurrent、QtD-Bus、Qt
(提供定位机制、地图和导航技术、 OpenGL、QtLocation 位置搜索等功能的QML和C++
API) 等等。

六.GUI的运行机制及消息处理模型

在这里插入图片描述

七.Qt三大机制

1.1信号与槽机制

信号与槽是Qt中的一种通信机制,应用于对象之间的通信,可以是同一个对象,可以是同类的不同对象,也可以是不同类的对象

我想关于信号可以归纳出以下几点:

从形式上看,信号很像标准C++中的函数一样,但是信号是没有函数体定义的;
信号的返回类型都是void,不要指望能从信号返回什么有用的信息;
关键字signals表示进入了信号声明区,在其后面即可声明信号;
信号不存在访问权限的问题,即不受public、protected、private的限制;
除了系统预定义好的信号,我们还可以自定义信号,使用emit关键字就可以发射:emit clicked() 。

1.2.槽函数

槽函数跟C++中的成员函数很像,也可以通过类对象被调用。但比较牛的一点是,槽函数与信号连接之后,一旦信号发出,该槽函数就会被自动调用执行。
关键字slots意味着进入了槽函数声明区,在其后即可声明或者定义槽函数。
槽函数也存在访问权限问题,即public、protected、private:

public slots:此区域声明的槽函数表示任何对象发出的信号都可以与之连接;
protected slots:此区域声明的槽函数表示当前类及其子类的对象可以将信号与之连接;
private slots:此区域声明的槽函数表示只有当前类的对象可以将信号与之连接。

1.一个信号可以连接多个槽

当信号发射时,会以不确定的顺序一个接一个的调用各个槽。

  • 多个信号可以连接同一个槽
    即无论是哪一个信号被发射,都会调用这个槽。
  • 信号直接可以相互连接
    发射第一个信号时,也会发射第二个信号。
  • 连接可以被移除

2.内存管理机制

首先需要明确一个概念,Qt作为一套GUI(图形用户界面)类库,在开发时,我们应用最多的就是各类窗口,其中经常用到父子窗口。必须明确,父子窗口一种窗口之间的组合关系,而不是继承中的父子类关系,两者绝没有任何关系。

Qt中的内存管理:子窗口可以通过指定父窗口的方式,来托管子窗口的内存,而父窗口又可以通过它的父窗口来托管自己的内存,一层一层,顶级窗口(QWidget类对象或者其派生类widgwt对象)一般在main函数中实例化为可以自动销毁空间的栈上对象,这样子窗口的空间就只需手动申请而不用管释放了。其中的底层实现大概是这样:当父窗口释放时,会在析构函数中遍历自己所有的子窗口,将它们释放。

所有的QObject类对象及其派生类对象都可以通过指定父对象来托管内存,QWidget继承自QObject,所以它及其派生类对象能够使用内管管理机制。
那么所有的子对象只能在父对象销毁的时候才能一起销毁,势必会造成内存驻留,能不能自己来销毁呢?当然开发者也可以使用delete来销毁子对象,但是不推荐这种用法,因为QObject对象远比普通的类对象复杂的多,QObject底层实现在我们不知道的情况下,正进行着一些工作。如果这个时候使用delete强制释放,会造成一些不可预知的错误。一般推荐使用deleteLater函数,进行子对象的安全释放,它会等待所有事情都处理完毕后才释放。

3.事件模型

  • 1.事件的创建 鼠标事件,键盘事件,窗口调整事件,模拟事件
    2.事件的交付 Qt通过调用虚函数QObject::event()来交付事件。
    3.事件循环模型 主事件循环通过调用QCoreApplication::exec()启动, 随着QCoreApplication::exit()结束,
    4.本地的事件循环可用利用QEventLoop构建。 一般来说,事件是由触发当前的窗口系统产生的,
    但也可以通过使用QCoreApplication::sendEvent()和QCoreApplication::postEvent()来手动产生事件。
    需要说明的是QCoreApplication::sendEvent()会立即发送事件,QCoreApplication::postEvent()则会将事件放在事件队列中分发。
    5.自定义事件
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值