QT是一个1991年由Qt Company开发的一个跨平台的 C++图形用户界面 应用程序框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
支持平台:
Windows – XP、Vista、Win7、Win8、Win2008、Win10
Uinux/X11 – Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS、和其他很多X11平台
Macintosh – Mac OS X
Embedded – 有帧缓冲支持的嵌入式Linux平台,Windows CE
Symbian、Symbian^3、Symbian Anna、Symbian Belle、MeeGo
Qt按照不同 发行版本,分为商业版(为商业软件提供开发,他们提供传统商业软件发行版,并且提供在商业有效期内的免费升级和技术支持服务)和开源的LGPL版本(为了开发自有而设计的开放源码软件,它提供了和商业版本同样的功能,在GNU通用公共许可下,是免费)。
特点:
1、跨平台,几乎支持所有的平台。
2、接口简单,容易上手,学习QT框架对学习其他框架有参考意义。
3、一定程度上简化了内存回收机制。
4、开发效率高,能够快速的构建应用程序。
5、有很好的社区氛围,市场份额在缓慢上升。
6、可以进行嵌入式开发。
编译程序:
第一,直接使用Qt qmake工具编译;
第二,使用Qt Creator软件直接编译;
第三,市场上的一些第三方编译工具。
QT主要编译器版本区分:
MSVC版本:这个版本你需要下载VS,不然没法用。
MinGW版本:这个可以直接使用。
两个版本不通用,但是QT Creator是通用的,查看版本: QT Creator工具->选项->构建和运行->构建套件里面看。
https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5
QT分为4.0版本和5.0版本他们之间的差别很大,不通用!!!
4.0版本主要使用于 嵌入式开发,现在大部分的公司都转向了5.0,支持的特性越来越多。
Qt程序可以自己直接编写,出口成章。也可以依托于一个神器——集成开发环境 Qt Creator。Qt Creator 是一个强大的跨平台 IDE,集编辑、 编译、 运行、 调试功能于一体。它不仅有简洁方便的开发界面,同时支持图形化编程。相当于有了它,即使你不会写程序,也可以通过控件的拖拽排布,设计出一个自己喜欢的图形界面。
0)文件介绍:
项目管理文件 .pro,存储项目设置的文件;
main() 函数是应用程序的入口。它的主要功能是创建应用程序,创建窗口,显示窗口,并运行应用程序,开始应用程序的消息循环和事件处理;
窗体界面文件 .ui,一个XML格式存储的窗体上的元件及其布局的文件;
任何窗体或界面组件都是用类封装的,一个类一般有一个头文件(.h 文件)和一个源程序文件(.cpp 文件)。
1)布局管理器
Qt有3种布局管理器,让控件布局不会因为平台改变而扭曲,能够对窗口部件的尺寸大小和位置进行设置的对象。这三个布局管理器可以各种嵌套组合,组合成各种复杂的布局层次。
QHBoxLayout:在水平方向排列窗口部件,从左到右;
QVBoxLayout:在垂直方向排列窗口部件,从上到下;
QGridLayout:把各个窗口部件排列在一个网格中。
2) 信号与槽
控件与控件之间,控件与嵌入式板卡之间通信,团结合作一同创造复杂的信号通信网络——信号与槽。
控件与控件之前可以通过信号与槽的函数格式,将两个信号共通,参数值互相传递和改变,就像媒婆一样搭桥牵线。嵌入式LINUX开发的实现主要是文件的打开关闭读写,我们也可以把文件的信息传递给控件,也可以把控件的改变值写入到文件中。
信号(Signal)就是在特定情况下被发射的事件;
槽(Slot)就是对信号响应的函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。
槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
信号与槽关联基本格式:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
QObject 是所有 Qt 类的基类,connect() 是 QObject 类的一个静态函数,实际调用时可以忽略前面的限定符。
参考资料:
http://c.biancheng.net/view/1823.html
https://www.devbean.net/2012/08/qt-study-road-2-catelog/
相关书籍:
1.Qt Creator快速入门.pdf http://www.cctry.com/thread-289864-1-1.html
2.Qt4图形设计与嵌入式开发.pdf
3.QT5+编程入门.pdf
4.Qt从入门到精通.pdf
5.QT高级编程 http://www.cctry.com/thread-289988-1-1.html
整个框架是:QGraphicsView容器
->QGraphicsScene场景
->QGraphicsItem图元:把一个背景图封装到创建的图元中去,把多个item图元放到一个场景里去,让这个场景在QGraphicsView这个容器里显示出来。
游戏界面布局:GraphicsView(提供界面,既可以管理大数量的定制2Ditems,又可与它们交互,items能处理键盘/鼠标事件)拖进工作区,这是QT的一个2D显示器; LCD number控件作游戏计分器,三个PushButton作按钮。
新建QT Resource File,名称为img,相当于模拟文件系统,存放所需图片。Format格式支持BMP,GIF,JPG,PNG等(原生只支持BMP和PNG),解决图片格式不兼容的问题,把图片格式转化成QPixmap,调用构造函数来找接口,QGraphicsPixmapItem像素图元,找到函数void setPixmap(const QPixmap & pixmap)调用构造函数来使用。
新建myitem类,基类为QGraphicsPixmapItem(QG raphicsItem虚基类,有8种派生类);
myitem.h里面声明鼠标抬起事件和按下事件void mousePressEvent (QGraphicsSceneMouseEvent *event);void mouseReleaseEvent (QGraphicsSceneMouseEvent *event),还要声明设置鼠标点击效果,设置一个布尔函数bool isMouse()来获取点击到老鼠的事件。
绑定按键槽函数:在myscene.h中的公开槽函数(public slots)中声明按键功能函数void startGame();void pauseGame();void stopGame();最后在myscene.cpp中实现“开始”、“暂停”、“停止”这些按键函数。
用单例模式对实现计分器的使用,建议不使用全局变量,因为调用次数太少时,会出现延迟,调用次数太多,程序效率就会降低很多。类永远只产生一个对象,不管在哪儿获取,都只有这一个对象,称之为单例模式(一般可在游戏中设置音效开关)。
声明函数void addScore()绑定信号与槽,在signals中声明函数void beatMouse()自定义一个信号。然后定义addScore函数,向外发送信号。
在 Visual Studio 中使用 Qt,需要安装一个 Visual Studio 的 Qt 插件,这个插件程序由 Qt 公司提供。目前最新的 Visual Studio Qt 插件是: Visual Studio Add-in 2.0.0 for Qt5 MSVC 2015,可以从 Qt 官网下载并安装(安装此插件之前,需已经安装好 Visual Studio 2015)
安装完成后,在 Visual Studio 的主菜单栏上增加了一个菜单组“Qt VS Tools”,在新建项目向导里增加了可创建 Qt 项目的项目模板。
Visual Studio 2015 里创建一个 Qt GUI 应用程序项目。创建项目时选择项目模板:选择创建 Qt GUI Application 项目,根据向导提示完成项目 Demo 的创建。
在首次使用 Visual Studio 编译 Qt 项目之前,必须先进行一些设置,否则会提示没有设置 Qt 版本,无法编译项目。
设置 Qt 版本。单击 Visual Studio 菜单项Qt VS Tools→Qt Options,Qt Versions 页面单击“Add”按钮出现如图 3 所示的添加 Qt 版本对话框。单击“Path”文本框后面的按钮,在出现的目录选择对话框里选择 Qt 5.9.1 安装目录下的 MSVC 编译器目录,如D:\Qt\Qt5.9.1\5.9.1\msvc2015_64。选择目录后,Version name 编辑框里会自动出现版本名称,可以修改此名称为意义更明显的名字,如“msvc2015-64bit”。
然后,再单击 Visual Studio 菜单项Qt VS Tools→Qt Project Settings,为项目设置 Qt 版本,在此对话框的 Properties 分页下的列表框里,在 Version 下拉列表框中选择某个 Qt 版本。完成两项设置后,在进行编译就没有问题了,运行和调试都在VS。