Qt 学习分享

Qt学习分享

1 Qt介绍

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工具->选项->构建和运行->构建套件里面看。
在这里插入图片描述

Transition from Qt4.x to Qt5

https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5
QT分为4.0版本和5.0版本他们之间的差别很大,不通用!!!
4.0版本主要使用于 嵌入式开发,现在大部分的公司都转向了5.0,支持的特性越来越多。

  1. Qt5使用了基于OpenGL的场景绘画来加速 qml,加强了绘画效应和粒子系统
  2. 全新的 QWebEngineView 使用的是 Chromium 引擎,通过使用 Qt WebChannel 通道来桥接 Qt 和 Js
  3. Qt5对Qt4的模块进行重构,特别是对Qt Gui模块的修改。Qt5 把 Qt 库抽离为特定的库和模块,这样就可以选择特定的库编译、使用和部署;从原来的 QtGUI 抽离独立一个 Qt Widgets 模块
  4. 新的信号与槽连接语法在编译信号与槽的兼容性时会提供检查,会自动转化隐式类型。Qt 5巧妙地利用C++的函数指针,为信号槽连接提供了编译期类型检查,同时还减少了信号槽的限制,在Qt4中,只有类的非静态成员函数才允许作为槽函数,但是在Qt5中,所有函数,包括全局函数,静态函数,甚至匿名函数,都可以作为槽函数。
  5. 扩展网络连接模块:Qt5 提供更好的IPv6双模式网络的支持,弃用QHttp, 使用新的 QNetworkAccessManager 和 QNetworkRequest,更好的 TCP socket 连接和 SSL 验证
  6. Qt5 提供了一套类来解析和生成 JSON,Qt 4中需使用三方库才能解析JSON
2 Qt用到的开发工具
  1. GUN工具集
    在这里插入图片描述
  2. MinGW:生成 Windows 里面的 exe 程序和 dll 链接库。MinGW 使用的静态库扩展名为 .a ,而其动态库扩展名则为 .dll, .a 仅在生成目标程序过程中使用, .dll 则是在目标程序运行时使用。
    ( Linux/Unix 系统里静态库扩展名一般是 .a,动态库扩展名一般是 .so, Windows 系统里 VC 编译器用的静态库扩展名一般是 .lib,动态库扩展名一般是 .dll )
  3. CMake:开源 跨平台自动化构建工具,可以跨平台地生成各式各样的 makefile 或者 project 文件, 支持利用各种编译工具生成可执行程序或链接库。CMake 自己不编译程序, 它相当于用自己的构建脚本 CMakeLists.txt,叫各种编译工具集去生成可执行程序或链接库。
  4. Qt工具集:qmake 是 Qt 开发最核心的工具,既可以生成 Qt 项目文件 .pro ,也可以自动生成项目的 Makefile 文件。
    在这里插入图片描述
    只有搭建好了 Qt 环境(Qt库和开发工具),即可通过 vim 纯代码编写 Qt 程序,再借助 Qt 里的 qmake 工具编译 Qt 代码,具体流程如下:
    1)编写 Qt 代码
    2)通过 qmake -project 生成工程文件
    3)工程文件中添加所需模块:QT += widgets
    4)根据工程文件用 qmake 命令生成 Makefile
    5)通过 make 编译代码生成所需可执行程序
    6)通过“./”运行程序

Qt程序可以自己直接编写,出口成章。也可以依托于一个神器——集成开发环境 Qt Creator。Qt Creator 是一个强大的跨平台 IDE,集编辑、 编译、 运行、 调试功能于一体。它不仅有简洁方便的开发界面,同时支持图形化编程。相当于有了它,即使你不会写程序,也可以通过控件的拖拽排布,设计出一个自己喜欢的图形界面。

3 Qt 相关知识点

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

4 Demo实例

在这里插入图片描述
在这里插入图片描述
整个框架是: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函数,向外发送信号。

5 VS中使用Qt

在 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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值