1.什么是QT
QT是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形所需的所有功能。它是完全面向对象的,容易扩展,并且允许真正的组件编程。
2.QT的发展史
1991年,QT最早由奇趣科技开发
1996年,进入商业领域,它也是目前流行的Linux桌面环境KDE的基础
2008年,奇趣科技被诺基亚收公司收购,QT称为诺基亚旗下的编程语言
2012年,QT又被Digia公司收购
2014年,跨平台的集成开发环境QT Creator 3.1.0发布,同年5月20日配发了QT 5.3 正式版,至此QT实现了对iOS、Android、WP等各平台的全面支持。
3.QT支持的平台
Windows - XP、vista、win7、win8、win2008、win10
Linux/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
4.QT版本
QT按照不同的版本发行,分为商业版和开源版。
商业版----为商业软件提供开发,他们提供传统商业软件开发版,并且提供在商业有效期内的免费升级和技术支持服务。
开源的LGPL版本---为了开发自由而设计的开放源码软件,它提供了和商业版同样的功能。在GNU通用公用许可下,它是免费的。
5.QT的优点
跨平台,几乎支持所有的平台
接口简单,容易上手,学习QT框架对学习其它框架有参考意义
一定程度上简化内存回收机制
开发效率高,能够快速构建应用程序
有很好的社区氛围,市场份额在缓慢上升
可以进行嵌入式开发
6.市面上成功的案例
Linux桌面环境KDE
WPS office办公软件
Skype 网络电话
Google Earth 谷歌地图
VLC多媒体播放器
VirtualBox虚拟机软件
0.选择New Project或者工具栏新建文件
选择一个模板----Qt Widgets Application
1.点击创建项目后,选择项目路径以及给项目起名称
名称:不能有中文,不能有空格
路径:不能有中文路径
注意点:
创建时的创建路径必须是全英文的,如果有中文虽然不会报错,但是运行页面不会出来。
2.Kits
选择编译套件,如有多个,按需要选择即可。
3.Details
默认创建窗口类名称可以自己定义。
Base class(基类)包括:
1.Qwidget是所有窗口类的基类;
2.QMainWindow是菜单窗口类;
3.QDialog是对话框窗口类。QMainWindow、QDialog的父类是Qwidget。
类名可以自定义也可以默认。
Generate form(创建界面)勾选代表启动QT设计界面功能。即有一个初始页面,可以拖拽控件。如果不选择则使用代码编辑界面。
4.sumary
可添加版本控制系统(如:git,svn,vss),如不使用,默认 None 即可。
5.项目创建成功后,main.cpp的介绍
#include "mywidget.h"
#include //包含一个应用程序类的头文件
//main程序入口
//argc命令行变量的数量,argv命令行变量的数组
int main(int argc, char *argv[])
{
//创建应用程序对象a,在QT中,应用程序对象有且仅有一个
QApplication a(argc, argv);
//自定义窗口对象 myWidget父类为QWidget
myWidget w;
//窗口对象默认不会显示,必须要调用show方法显示窗口
w.show();
//让应用程序对象a进入消息循环机制
//让代码阻塞到这一行,一直捕获用户行为
//让窗口不会一闪而过,只有点了窗口的×才会退出这个窗口(消息循坏)
return a.exec();
}
其他:
Translation
可以为项目创建一个翻译文件,将你的应用界面翻译成其它语言,不适用默认none即可。
build system
CMake很常用,功能强大,比如OpenCV、VTK。但语法繁杂。
qmake是针对辅助QT开发的,但也可以在非QT项目使用,特点是语法简单明了,功能简单。
Qbs号称下一代构架工具,许多人追捧。
.pro文件的解释
QT += core gui // Qt包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets // 大于4版本以上 包含 widget模块
TARGET = 01_FristProject // 目标 生成.exe程序的名称(运行编译之后生成的.exe文件)
TEMPLATE = app //模块 应用程序模块 Application
SOURCES += mian.cpp\ // 源文件
mywidget.cpp
HEADERS += mywidget.h //头文件
头文件 (.h文件)
♣ 头文件开头的是防止重复加载的,在新版编译器中部分功能可以用#program once代替,但是两者有一些不同,具体可以参考:#ifndef 与 #program once 的区别
源文件(.cpp文件)
在Qt助手中搜索PushBotton
文档中给出了一些该类的信息,比如需要的头文件,所属模块,父类、子类等等。
按钮常用API
- 创建 QPushButton * btn = new QPushButton
- 设置父亲 setParent(this)
- 设置文本 setText(“文字”)
- 设置位置 move(宽,高)
- 重新指定窗口大小 resize
- 设置窗口标题 setWindowTitle
- 设置窗口固定大小 setFixedSize
mywidget.cpp
#include "mywidget.h"
#include // 按钮控件的头文件
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
// 创建一个按钮对象
QPushButton * btn = new QPushButton;
//btn->show(); // show以顶层方式弹出窗口
// 让btn对象依赖在myWidget窗口中
// this指向的就是当前对象的指针
btn->setParent(this);
// 显示文本
btn->setText("第一个按钮");
// 创建第二个按钮
// 这种方式创建的按钮窗口是按照控件的大小创建窗口(比较小)
QPushButton * btn2 = new QPushButton("第二个按钮",this);
// 移动btn2按钮位置(如果没有移动的话,第二个按钮会覆盖第一个按钮,显示不出来)
btn2->move(100,100);// 坐标
// 重置窗口大小
resize(600,400);
// 设置窗口的标题
setWindowTitle("第一个窗口");
// 设置固定窗口大小(未设置前,窗口是可以拖拽改变窗口大小的)
setFixedSize(600,400);
}
myWidget::~myWidget()
{
}
特点:
当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。
一定程度上简化了内存回收机制.
当父对象析构的时候,这个子对象列表中的所有对象都会被析构,当析构子对象的时候,会自动从父对象的子对象列表中删除。
QObject 的构造函数中会传入一个 Parent 父对象指针,children() 函数返回 QObjectList。即每一个 QObject 对象有且仅有一个父对象,但可以有很多个子对象。按照这种形式排列就会形成一个对象树的结构,最上层是父对象,下面是子对象,在再下面是孙子对象,以此类推。
在项目中新建一个文件
点中项目名称右键,选择Add New
然后点击完成即可。
pro文件中不用手动添加,已经自动添加过了。
mypushbutton.h
mypushbutton.cpp
以左上角为原点(0,0),X向右增加,Y向下增加。
对于嵌套窗口来说,其坐标是相对于父窗口来说的
参考
Qt学习笔记(2)——Qt工程文件及基础知识_Mist_Orz的博客-CSDN博客