C++框架 之Qt的一系列注意细节
1.Qt概述
1.1 什么是Qt
Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
1.2 Qt的发展史
1991年 Qt最早由奇趣科技开发
1996年 进入商业领域,它也是目前流行的Linux桌面环境KDE的基础
2008年 奇趣科技被诺基亚公司收购,Qt称为诺基亚旗下的编程语言
2012年 Qt又被Digia公司收购
2014年4月 跨平台的集成开发环境Qt Creator3.1.0发布,同年5月20日配发了Qt5.3正式版,至此Qt实现了对iOS、Android、WP等各平台的全面支持。
当前Qt最新版本为 5.5.0
1.3 支持的平台
☆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
1.4 Qt版本
Qt按照不同的版本发行,分为商业版和开源版
●商业版
为商业软件提供开发,他们提供传统商业软件发行版,并且提供在商业有效期内的免费升级和技术支持服务。
●开源的LGPL版本:
为了开发自有而设计的开放源码软件,它提供了和商业版本同样的功能,在GNU通用公共许可下,它是免费的。
1.5 Qt的安装
下载地址官网:http://download.qt.io/archive/qt/
Linux Host
Qt 5.5.0 for Linux 32-bit (535 MB) (info)
Qt 5.5.0 for Linux 64-bit (532 MB) (info)
Qt 5.5.0 for Android (Linux 64-bit, 605 MB) (info)
Qt 5.5.0 for Android (Linux 32-bit, 608 MB) (info)
Qt 5.5.0 for Mac (588 MB) (info)
Qt 5.5.0 for Android (Mac, 652 MB) (info)
Qt 5.5.0 for Android and iOS (Mac, 1.7 GB) (info)
Qt 5.5.0 for Windows 64-bit (VS 2013, 650 MB) (info)
Qt 5.5.0 for Windows 32-bit (VS 2013, 633 MB) (info)
Qt 5.5.0 for Windows 32-bit (VS 2012, 587 MB) (info)
Qt 5.5.0 for Windows 32-bit (VS 2010, 585 MB) (info)
Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2, 959 MB) (info)
Qt 5.5.0 for Android (Windows 32-bit, 1.0 GB) (info)
Qt 5.5.0 for Windows RT 32-bit (621 MB) (info)
OS X Host
Qt 5.5.0 for Mac (588 MB) (info)
Qt 5.5.0 for Android (Mac, 652 MB) (info)
Qt 5.5.0 for Android and iOS (Mac, 1.7 GB) (info)
Windows Host
Qt 5.5.0 for Windows 64-bit (VS 2013, 650 MB) (info)
Qt 5.5.0 for Windows 32-bit (VS 2013, 633 MB) (info)
Qt 5.5.0 for Windows 32-bit (VS 2012, 587 MB) (info)
Qt 5.5.0 for Windows 32-bit (VS 2010, 585 MB) (info)
Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2, 959 MB) (info)--我采用的
Qt 5.5.0 for Android (Windows 32-bit, 1.0 GB) (info)
Qt 5.5.0 for Windows RT 32-bit (621 MB) (info)
Qt对不同的平台提供了不同版本的安装包,可根据实际情况自行下载安装
MinGW32 --> Minimalist GNU for Windows 32。
安装过程:
很容易!一路next!!
1.6 Qt的优点
●跨平台,几乎支持所有的平台
●接口简单,容易上手,学习QT框架对学习其他框架有参考意义。
●一定程度上简化了内存回收机制
●开发效率高,能够快速的构建应用程序。
●有很好的社区氛围,市场份额在缓慢上升。
●可以进行嵌入式开发。
1.7为什么学习Qt
1)学习GUI编程,市场上任何一款产品几乎都带图形界面,市场上很火的Android、IOS编程无非也是GUI app编程,GUI编程都是差不多,学习Qt后再学习Android、IOS,那是 So easy。就算不学习Android、IOS,由于Qt跨平台特性,通过Qt写的程序可以在Android、IOS平台上运行。
2)锻炼编程能力,GUI编程比后台编程更能锻炼人,因为你除了核心数据处理外,还需要协调界面,同时懂得前端和后台编程,才能更好地写好程序。
3)为了更好地使用C++,学习Qt的框架(Qt是C++实现的应用程序框架),很多游戏、后台服务器框架都是使用C++实现。
1.8如何学习Qt
第一,要学好C++基础,这样函数和类用起来就很简单了;第二,要会使用帮助,IDE(Qt Creator)一般都带有帮助文件;第三,要会看文档,文档里面会包含全部的类和函数;只要会看文档,就知道了函数或者类的作用,就会用。这个是不需要记的。
2、 创建Qt项目
你还在为没有学习平台而苦恼吗?你还在为没有学习资料而烦心吗?你还在为没人指导而担忧吗?可以私信小编 C++,为你提供学习的平台和资料。
2.1 使用向导创建
打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项
弹出New Project对话框,选择Qt Widgets Application,
选择【Choose】按钮,弹出如下对话框
设置项目名称和路径,按照向导进行下一步,
选择编译套件
向导会默认添加一个继承自CMainWindow的类,可以在此修改类的名字和基类。继续下一步
即可创建出一个Qt桌面程序。
2.2 手动创建
添加一个空项目
选择【choose】进行下一步。设置项目名称和路径 —> 选择编译套件 --> 修改类信息 --> 完成(步骤同上),生成一个空项目。在空项目中添加文件:在项目名称上单击鼠标右键弹出右键菜单,选择【添加新文件】
弹出新建文件对话框
在此对话框中选择要添加的类或者文件,根据向导完成文件的添加。
代码:
HelloQt.pro
QT += widgets SOURCES += main.cpp
main.cpp
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
总结:
●1>. 在窗口中添加按钮
▲类名: QPushButton
▲设置按钮显示的内容: setText
▲移动按钮位置: move
▲按钮设置父窗口:setParent
▲设置窗口的大小:resize() resizeFixed()
●2>. Qt的坐标体系:
▲坐标原点: 左上角
▲x轴延伸的方向: 向右递增
▲y轴延伸的方向: 向下递增
●3>. Qt内存回收机制
满足什么条件的类不需要用户手动释放内存?
▲1. 从QObject类直接或间接派生
▲2. 给直接或间接派生出的类, 指定父对象
2.3 .pro文件
在使用Qt向导生成的应用程序.pro文件格式如下:
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
.pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。.pro文件的写法如下:
●注释
从“#”开始,到这一行结束。
●模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:TEMPLATE = app
▲app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
▲ lib - 建立一个库的makefile。
▲ vcapp - 建立一个应用程序的VisualStudio项目文件。
▲ vclib - 建立一个库的VisualStudio项目文件。
▲ subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
● #指定生成的应用程序名:
TARGET = QtDemo
● #工程中包含的头文件
HEADERS += include/painter.h
●#工程中包含的.ui设计文件
FORMS += forms/painter.ui
●#工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
●#工程中包含的资源文件
RESOURCES += qrc/painter.qrc
● greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
这条语句的含义是,如果QT_MAJOR_VERSION大于4(也就是当前使用的Qt5及更高版本)需要增加widgets模块。如果项目仅需支持Qt5,也可以直接添加“QT += widgets”一句。不过为了保持代码兼容,最好还是按照QtCreator生成的语句编写。
●#配置信息
CONFIG用来告诉qmake关于应用程序的配置信息。
CONFIG += c++11 //使用c++11的特性
在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项更安全。
2.4 一个最简单的Qt应用程序
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
解释:
★Qt头文件没有.h后缀
★Qt一个类对应一个头文件,类名就是头文件名
★QApplication应用程序类
●★管理图形用户界面应用程序的控制流和主要设置。
●★ 是Qt的整个后台管理的命脉它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。
●★ 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。
★a.exec()
程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
3、QtCreator常用快捷键
有的电脑是 Fn+...
1)帮助文件:F1 (光标在函数名字或类名上,按 F1 即可跳转到对应帮助文档,查看其详细用法)
2).h 文件和对应.cpp 文件切换:F4
3)编译并运行:Ctrl + R
4)函数声明和定义(函数调用和定义)切换:F2
5)代码注释取消注释:Ctrl + / (选中代码再按快捷键)
6)字体变大变小:Ctrl + 鼠标滚轮向上向下
7)移动代码:选中所要移动的代码 -> 按住 ctrl + shift -> 键盘方向键
8)查找替换关键字:ctrl + f
9)快速打开代码所在目录:编辑模式下 -> 选中项目文件 -> 右击 -> 选择“显示包含的目录”,即可显示项目所在目录(此方法同样可以打开代码文件所在目录)
帮助文档的使用:
比较详细的链接:https://blog.csdn.net/tennysonsky/article/details/48471805
我们使用 Qt 帮助文档,主要分为这么几步:
1)类使用的相关介绍
2)查看所用部件(类)的相应成员函数(功能,参数,返回值)
3)查看部件的信号
4)查看部件的事件(所对应的虚函数如何编写)
所要查看的几个重要信息:
公有成员函数:操作部件属性的相关函数。
公有槽函数:Qt类中已经定义好的槽函数,直接可与信号相连接。
信号:软中断,如按下按钮触发 pressed() 信号等。
保护成员函数:通常事件所对应的虚函数放在此处。
事件:常用事件,如操作鼠标触发的鼠标事件。
1)当然,我们可以直接在“帮助”模式下的“索引”输入框里输入所需查看的类:
2)查看所用部件(类)的相应成员函数(功能,参数,返回值)
查看所用部件的相应成员函数( 本身的成员函数,继承过来的成员函数 ),主要是为了查看这个成员函数如何使
用,包括函数的功能,参数,返回值。
4、案例代码:
第一个:
01_QtTest.pro
#模块QT += core gui#高于4版本,添加 QT += widgets ,为了兼容Qt4greaterThan(QT_MAJOR_VERSION, 4): QT += widgets#应用程序的名字TARGET = mike#指定makefile的类型, appTEMPLATE = app#源文件 .cpp文件SOURCES += main.cpp mywidget.cpp#头文件 .h文件HEADERS += mywidget.h
main.cpp
#include "mywidget.h"//QApplication应用程序类//Qt头文件没有.h//头文件和类名一样#include int main(int argc, char *argv[]){ //有且只有一个应用程序类的对象 QApplication a(argc, argv); //MyWidget继承与QWidget, QWidget是一个窗口基类 //所以MyWidget也是窗口类 //w就是一个窗口 MyWidget w; //窗口创建默认是隐藏,需要人为显示 w.show(); //让程序一直执行,等待用户操作 //等待事件的发生 a.exec(); return 0;}
mywidget.cpp
#include "mywidget.h"MyWidget::MyWidget(QWidget *parent) : QWidget(parent){}MyWidget::~MyWidget(){}
mywidget.h
#ifndef MYWIDGET_H#define MYWIDGET_H#include class MyWidget : public QWidget{ //Q_OBJECT //信号与槽的时候需要public: MyWidget(QWidget *parent = 0); ~MyWidget();};#endif // MYWIDGET_H
你还在为没有学习平台而苦恼吗?你还在为没有学习资料而烦心吗?你还在为没人指导而担忧吗?可以私信小编 C++,为你提供学习的平台和资料。