QT入门

qt简介

跨平台的c++图形用户界面应用程序框架,

创建qt程序:
名称不能有空格中文,路径不能用中文路径
默认创建有窗口类,mywidget,基类有三种
qwidget 父类 只有一个空窗口
qmainwindow 多了菜单栏,状态栏
qdialog 多了对话框

创建界面。如果勾选上,则会多出一个设计界面,可以拖拽一些直接用的控件
添加版本控制系统 (svn vss git)在多人合作开发时用到版本控制系统

#include"mywidget.h"
#icnlude//包含一个应用程序类的头文件


int main (int argc,char argv[])
{
	QApplication a(argc,argv);
	myWidget w;
	w.show();
	return a.exec();//让应用程序对象进入消息循环机制,让代码阻塞到这行
}

QApplication 应用程序对象类,在qt中,应用程序对象有且仅有一个,类似int
myWidget 窗口对象类。
窗口对象默认不会显示,必须调用show方法

消息循环是个机制,类似一个死循环 点窗口的×才会退出
对象树的基本概念

工程文件中

QT       += core gui #QT包含的模块核心和图形模块

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #大于4版本以上保安widets模块。因为5版本以上才增加的widget模块,之前是包含在gui模块中

TARGET = untitled #生成的.EXE文件的名称
TEMPLATE = app   	#模板 :应用程序模板


SOURCES += main.cpp\  #源文件增加XXX
        widget.cpp

HEADERS  += widget.h #头文件增加XXX
#ifndef WIDGET_H
#define WIDGET_H

#include 

class Widget : public QWidget
{
    Q_OBJECT  //Q_OBJECT宏,允许类中视野信号和槽的机制

public:
    Widget(QWidget *parent = 0); //构造函数
    ~Widget();
};

#endif // WIDGET_H

命名规范与快捷键
命名规范:类名 首字母大写,单词和单词之间的首字母大写
函数名 变量名称 首字母小写,单词和单之间接首字母大写
快捷键:
注释 ctrl + /
运行 ctrl + r
编译 ctrl + b
字体缩放 ctrl + 鼠标滚轮
查找 ctrl + f
整行移动 ctrl + shift + ↑或↓
帮助文档 F1 或左侧按钮 或
自动对齐 ctrl + i
同名文件.h与.c切换 F4

帮助文档的使用
例如找一个QPushbuttom 类的使用
QT入门_第1张图片
qmake 表示在哪个模块 (如果没有需要在pro文件中加上)
inherits 表示他的父类是谁
inherited by 表示子类

QT入门_第2张图片
qmake 中没有的在第一行加入
创建窗口与创建按钮
QT入门_第3张图片
一般功能函数有多个重载函数,可以选择。

因为按钮的五类也是widget。所以 ,要显示出来也要用函数
show函数是显示在单独窗口的
所以要设置一个父类对象
this就是指向当前对象的指针
设置父亲 setParent(this)
设置文本 setText(“文字”)
设置位置(坐标)move(X,Y)
重新指定窗口大小 resize
设置窗口标题 setWindowtitle
设置窗口固定大小setFixedSize

对象树
在QT中创建对象会提供一个Parent对象指针
QObject 是以对象数的形式组织起来 (QObject 是所有类的父类)
当创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是parent,也就是父对象指针。
这相当于在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表
当父对象析构的时候,children列表中的所有对象都会被析构。即释放的时候就会释放
QT入门_第4张图片
创建的对象在兑取时候,如果指定的父亲是QObject的子类或派生下来的类可以不同管理释放的操作,将对象放入对象数中,析构父类的时候会先检查是否有子类,然后先析构子类,在析构父类。一定程度上简化了内存回收操作。

信号和槽的基本使用及拓展(重点)
connect 函数的四个参数 引号发送者,发送的具体信号,信号的接受者,信号的处理(槽) 槽就是处理的函数。
信号槽的优点:松散耦合,信号发送端和接收端本身是没有关联的。通过connect链接,将两端耦合在一起
例:按钮按下关闭窗口
找按钮的信号需要去帮助文档中找
QT入门_第5张图片
可以看到信号是从各个父类中继承,点进去找信号。
QT入门_第6张图片

toggled 切换,用于bool值

槽(slot)函数的寻找
因为要关闭窗口(是按钮的父类)所以去widget里面找槽函数
QT入门_第7张图片
第五个,点进去

QT入门_第8张图片
点进close可以看函数介绍
在这里插入图片描述
可以写mypushbutton也可以写Q pushbuttom

自定义的信号和槽
创建两个新类。创建的类不属于任何控件, 父类可以选择QObject
QT入门_第9张图片
创建对象前应现在widget头文件中声明一下
QT入门_第10张图片

QT入门_第11张图片
emit 触发自定义 信号 信号只声明不实现,槽函数需要实现,

自定义信号:写到signals下,返回void,需要声明不需要实现,可以有参数可以重载。
自定义槽函数:返回void,需要声明也需要实现,可以有参数,可以重载,写到public slot下货public下或全局函数。后两种方法仅限高版本使用。

自定义信号和槽重载
需要用函数指针明确指向函数地址
比如加入参数
在emit 中传入信号参数
数=QT入门_第12张图片
QT入门_第13张图片
当信号发生重载时。编译器不知道找哪个地址 需要做以下处理
QT入门_第14张图片
函数指针明显是说明什么参数了,因此等号右边会自动识别

qstring打印出来会带引号,转换成char就不会。QT中需要先转成QByteArray(toutf8 是QT中的一种Qbytearray) 在转char
QT入门_第15张图片.toutf8是转bytearray的函数,data 是bytearray中的函数,可以在帮助中找到

信号连接信号
一个信号触发另外一个函数
QT入门_第16张图片
用按钮触发下课
QT入门_第17张图片
disconnect 断开信号
总结:
1、一信号可以连接多个槽函数
2、多个信号可以连接同一个槽函数
3、信号和槽函数的参数必须类型一一对应
4、信号可以连接信号
5、信号参数个数可以多于槽参数个数

QT4版本以前的信号和槽的连接方式
用一个纯大写的signal然后从里面选择信号,槽同理,但是重载情况下,不用定义指针了直接可以选择有无参。缺点:类型不做监测。
connect(zt,SIGNAL(),st,SLOT());
**

lambda表达式

**
用于定义并创建匿名的函数对象,简化变成工作
表达式基本构成
[capture] (parameters)mutable->return-type
{
statement
}
[函数对象参数](操作符重载函数参数)mutable->返回值{函数体} ()

函数对象参数

[]表示一个lambda的开始,必须存在 。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义lambda为止时lambda所在作用范围内可见的1、局部变量(包括lambda所在类的this)。函数对象参数有以下形式:
空,没有使用任何函数对象参数

= 函数体内可以使用lambda 所在作用范围内所有可见的局部变量,是以值传递方式。
& 函数体内可以使用lambda所在作用范围内所有可见的局部变量,是以引用传递方式
this 函数体可以用lambda所在类中的成员变量
a, 将a值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认函数是const的,要修改传递进来的a的拷贝,可以添加mutable修饰符。
&a 将a按引用进行传递
a,&b,将a按值传递,b按引用
=,&a,&b 除a,b用引用其他用值传递

2、操作符重载函数
标识重载的()操作符的参数,没有参数时,这部分可以省略。参数可以通过按值如(a,b)和按引用(&a,&b)两种方式进行传递

3、可修改标识符
mutable声明,可省略,按值传递函数对象参数时,加上此修饰符可以修改按值传递进来的拷贝(不是改值本身)
4、函数返回值

-> 返回值类型 当返回值为void或者函数体中只有一处return的地方。可以省略
5、函数体,{}便是函数的实现们不能省略,但是函数体可以为空
6、()指执行函数。 如果在类似connect 的函数中不需要加最后的小括号。

你可能感兴趣的:(qt)