什么是 qt
- Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
- Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要
- Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。
- Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等
qt 发展史
- Qt 由奇趣科技公司(Trolltech)的两位创始人于 1990 年着手开发,1995 年发布 Qt 1.0。
- 2008 年,奇趣科技被诺基亚公司收购,Qt 也因此成为诺基亚旗下的编程语言工具。
- 在智能手机的冲击下诺基亚大厦轰然倒塌,2012 年将 Qt 转让给 Digia 公司。
qt 应用程序框架(英文路径!!!)
项目 (Application)
- Qt Widgets Application,支持桌面平台的有图形用户界面(Graphic User Interface,GUI) 界面的应用程序。GUI 的设计完全基于 C++ 语言,采用 Qt 提供的一套 C++ 类库。
- Qt Console Application,控制台应用程序,无 GUI 界面,一般用于学习 C/C++ 语言,只需要简单的输入输出操作时可创建此类项目。
- Qt Quick Application,创建可部署的 Qt Quick 2 应用程序。Qt Quick 是 Qt 支持的一套 GUI 开发架构,其界面设计采用 QML 语言,程序架构采用 C++ 语言。利用 Qt Quick 可以设计非常炫的用户界面,一般用于移动设备或嵌入式设备上无边框的应用程序的设计。
- Qt Quick Controls 2 Application,创建基于 Qt Quick Controls 2 组件的可部署的 Qt Quick 2 应用程序。Qt Quick Controls 2 组件只有 Qt 5.7 及以后版本才有。
- Qt Canvas 3D Application,创建 Qt Canvas 3D QML 项目,也是基于 QML 语言的界面设计,支持 3D 画布。
类信息 (Details)
- 基类 (父类)
- QMainWindow 是主窗口类,主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口
- QWidget 是所有具有可视界面类的基类,选择 QWidget 创建的界面对各种界面组件都可以 支持
- QDialog 是对话框类,可建立一个基于对话框的界面
编译运行
QApplication 应用程序类
- QT 头文件没有.h,头文件和类名一样
- 有且只有一个应用程序类的对象
QApplication (argc,argv) - QWidget 是一个窗口基类,所有继承它的类也可以理解为窗口类,窗口创建好后默认隐藏,显示出来需要人为调用 show () 函数
- a.exec ();让程序一直执行 (while), 等待用户操作
pro 项目
- 注释: #
- 模块???
- 高于 qt4 版本,为了兼容 qt4
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - 应用程序的名字
TARGET = 01_test - 指定 makefile 的类型
TEMPLATE = app - 源文件 .cpp
SOURCES += main.cpp
widget.cpp - 头文件 .h
HEADERS += widget.h
模块
指定父对象
比如我要在窗口中显示一个按钮
如果不指定父对象,对象和对象之间没有关系,独立显示
所以要指定对象
如果 a 指定 b 为它的父对象,a 就在 b 上面
指定父对象:
- setParent
eg: b.settParent(&a) - 通过构造函数传参
信号和槽
信号和槽是 Qt 特有的消息传输机制,它能将相互独立的控件关联起来。
在 Qt 中,用户和控件的每次交互过程称为一个事件
Qt 中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号
在 Qt 中,对信号做出的响应动作就称为槽
QPushButton b1;
想要 b1 具有点击或者其他效果
connext (&b1,&QPushButton::pressed,this,&MainWidget::close)
- &b1:信号发出者,指针类型
- &QPushButton::pressed:处理的信号, & 发送者的名字::信号名字
- this:信号接收者
- &MainWidget::close:槽函数,信号处理函数 & 接收的类名::槽函数名字
自定义槽
自定义槽:普通函数的用法
Qt5: 任意的成员函数,普通全局函数,静态函数
槽函数需要和信号__一致__(参数,返回值)
由于信号都是没有返回值,所以槽函数一定没有返回值
自定义信号
信号必须有 signals 关键字来声明
信号没有返回值,但可以有参数
信号就是函数的声明,只需声明,无需定义
使用:emit mySignal ();
坐标系统
对于父窗口 (子窗口),坐标系统相对于屏幕
- 原点:相对于屏幕左上角
- x:往右递增
- y:往下递增