【五天时间】Qt从入门到实战:第一天

第一天1.1 Qt的介绍、优点、成功案例什么是Qt?Qt的优点Qt的成功案例

1.2 创建第一个Qt程序1.3 熟悉按钮控件常用API1.4 对象树的基本概念1.5 Qt中的坐标系统1.6 信号和槽的基本使用以及扩展

第一天

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、QDialogmain函数

QApplication a 应用程序对象,有且仅有一个myWidget w 实例化窗口对象w.show() 调用show函数显示窗口return a.exec(); 让应用程序对象进入消息循环机制中,代码阻塞到当前行

1.3 熟悉按钮控件常用API

#include "mywidget.h"

#include

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()));