【五天时间】Qt从入门到实战:第一天
第一天
1.1 Qt的介绍、优点、成功案例
什么是Qt?
Qt是一个跨平台的C++图形用户界面应用程序框架。她为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。下载地址:https://download.qt.io/new_archive/qt/
Qt的优点
- 跨平台,几乎支持所有的平台
- 接口简单,容易上手
- 一定程度上简化了内存回收机制
- 开发效率高,能够快速的构建应用程序
- 可以进行嵌入式开发
Qt的成功案例
- Linux桌面环境
- WPS office办公软件
- Skype网络电话
- 谷歌地图
- VLC多媒体播放器
- VirtualBox虚拟机软件
1.2 创建第一个Qt程序
- 点击创建项目后,选择项目路径以及项目名称.
- 名称:不能有中文,不能有空格
- 路径:不能有中文路径
- 默认创建有窗口类:myWidget,基类有三种选择:QWidget,QMainWindow、QDialog
- main函数
- QApplication a 应用程序对象,有且仅有一个
- myWidget w 实例化窗口对象
- w.show() 调用show函数显示窗口
- return a.exec(); 让应用程序对象进入消息循环机制中,代码阻塞到当前行
1.3 熟悉按钮控件常用API
#include "mywidget.h"
#include<QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
//创建一个按钮
QPushButton *btn=new QPushButton;
btn->show();//show以顶层方式弹出窗口控件
//让btn对象依赖在myWidget窗口中
btn->setParent(this);
//显示文本
btn->setText("第一个按钮");
//创建第二个按钮 按照控件的大小创建窗口
QPushButton * btn2=new QPushButton("第二个按钮",this);
//移动btn2按钮
btn2->move(100,100);
//重置窗口大小
resize(600,400);
//固定窗口大小
setFixedSize(600,400);
//设置窗口标题
setWindowTitle("第一个窗口");
}
myWidget::~myWidget()
{
}
1.4 对象树的基本概念
- 当创建的对象在堆区的时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放操作,自动将其放入对象树中。
- 一定程度上简化了内存回收机制。
1.5 Qt中的坐标系统
- 左上角为0,0点
- x以右为正方向,y以下为正方向
1.6 信号和槽的基本使用以及扩展
- 连接函数 connect
- 参数1:信号的发送者
- 参数2:发送的信号(函数地址)
- 参数3:信号的接收者
- 参数4:处理的槽函数(函数地址)
//需求 点击我的按钮 关闭窗口
//参数1 信号的发送者 参数2 发送的信号(函数的地址)参数3 信号的接收者 参数4 处理的槽函数
connect(myBtn,&QPushButton::clicked,this,&QWidget::close);
- 自定义信号和槽
- 自定义信号:写到Signals下;返回void;需要声明,不需要实现;可以有参数,不可以重载。
- 自定义槽函数:返回void;需要声明和实现;可以有参数,可以重载;写到public slot下或者public或者全局函数
//创建一个老师对象
this->zt=new Teacher(this);
//创建一个学生对象
this->st=new Student(this);
//老师饿了,学生请客的连接
connect(zt,&Teacher::hungry,st,&Student::treat);
//调用下课函数
classIsOver();
- 当自定义信号和槽出现重载,需要利用函数指针明确指向函数的地址
//连接带参数的信号和槽函数
//指针->地址
//函数指针->函数地址
void(Teacher::*teacherSignal)(QString)=&Teacher::hungry;
void(Student::*studentSlot)(QString)=&Student::treat;
//老师饿了,学生请客的连接
connect(zt,teacherSignal,st,studentSlot);
//调用下课函数
classIsOver();
- QString转为char*:
- QString转为QByteArray:.toUtf8()
- QByteArray转为char*:.data()
QString:有括号
char*:没有括号
- 信号可以连接信号
- 一个信号可以连接多个槽函数
- 多个信号可以连接同一个槽函数
- 信号和槽函数的参数必须类型一一对应
- 信号和槽函数的参数个数是不是要一致?信号的参数个数可以多于槽函数的参数个数
//无参信号和槽连接
void(Teacher::*teacherSignal2)(void)=&Teacher::hungry;
void(Student::*studentSlot2)(void)=&Student::treat;
connect(zt,teacherSignal2,st,studentSlot2);
//信号连接信号
connect(btn,&QPushButton::clicked,zt,teacherSignal2);
- 断开信号
//断开信号
disconnect(zt,teacherSignal2,st,studentSlot2);
- Qt4版本以前的信号和槽连接方式
//Qt4版本以前的信号和槽连接方式
//利用Qt4信号和槽连接无参版本
connect(zt,SIGNAL(hungry()),st,SLOT(treat()));