文章目录
- 1.前言
- 注意问题
- 2.学习历程
- 2.0 创建项目
- 快捷键:
- 2.1 创建按钮
- 2.2 对象树
- 2.3 调试输出
- 2.4 QT坐标系
- 2.5 信号和槽
- 3.Qmainwindow
- 3.1 窗口菜单栏创建
- 3.2 工具栏
- 3.3 状态栏
- 3.4 铆接部件
- 3.5 对话框
- 4.
1.前言
版本: 5.9.9
注意问题
- Qstring类型通多debug输出会自带引号,需要转为char* 类型,
2.学习历程
2.0 创建项目
不要有中文路径和命名
- main函数介绍:
- .pro文件
快捷键:
2.1 创建按钮
3 按钮控件常用API
3.1 创建 QPushButton * btn = new QPushButton
3.2 设置父亲 setParent(this)
3.3 设置文本 setText(“文字”)
3.4 设置位置 move(宽,高)
3.5 重新指定窗口大小 resize
3.6 设置窗口标题 setWindowTitle
3.7 设置窗口固定大小 setFixedSize
#include "mywidget.h"
#include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent)
{//创建第一个按钮QPushButton *btn=new QPushButton();btn->setParent(this);//设置父类,依附在其窗口btn->setText("first");//设置文本//btn->show();设置父类依附之后就不要在show了//创建第二个按钮QPushButton *btn2=new QPushButton("second",this);//直接设置父类和文本内容btn2->move(50,60);//移动按钮2,防止覆盖按钮1btn2->resize(50,30);//设置按钮大小resize(600,800);//设置背景窗口大小setFixedSize(600,800);//设置窗口固定大小setWindowTitle("第一个窗口");}myWidget::~myWidget()
{
}
2.2 对象树
在进行析构时,析构顺序与构造相反,后创建的先析构,但是是从父类找到子类,直到没有子类,开始从最后子类开始析构
-
在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。
当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!) -
Qt 引入对象树的概念,在一定程度上解决了内存问题。
当一个QObject对象在堆上创建的时候,Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。
任何对象树中的 QObject对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的children()列表中删除;如果有孩子,则自动 delete 每一个孩子。Qt 保证没有QObject会被 delete 两次,这是由析构顺序决定的。
2.3 调试输出
- 要包含
#include QDebug
- 使用:
qDebug() << "输出内容"
2.4 QT坐标系
原点左上角:(0,0) x向右增加,y向下增加
2.5 信号和槽
- 实现连接 : connnect()
- 参数:
1: 信号的发送者
2:发送的信号(函数地址)
3:信号的接收者
4:处理信号的槽函数(函数地址) - connect实现松散耦合,本来信号和槽之间相互独立
6.4 实现 点击按钮 关闭窗口的案例
6.5 connect(btn , &QPushButton::click , this , &QWidget::close );
- 例子:使用按钮1,发送点击信号, 接收者为当前窗口,槽函数为关闭当前窗口
在上面按钮创建cpp下添加这一行代码:
connect(btn,&QPushButton::clicked,this,&myWidget::close);
* 自定义信号和槽
7.1 自定义信号
7.1.1 写到 signals下
7.1.2 返回 void
7.1.3 需要声明,不需要实现
7.1.4 可以有参数 ,可以重载
7.2 自定义槽函数
7.2.1 返回void
7.2.2 需要声明 ,也需要实现
7.2.3 可以有参数 ,可以重载
7.2.4 写到 public slot下 或者public 或者全局函数
7.3 触发自定义的信号
7.3.1 emit 自定义信号
8 当自定义信号和槽出现重载
8.1 需要利用函数指针 明确指向函数的地址
8.2 void( Teacher:: * tSignal )( QString ) = &Teacher::hungry;
8.3 QString 转成 char *
8.3.1 .ToUtf8() 转为 QByteArray
8.3.2 .Data() 转为 Char *
8.4 信号可以连接信号
8.5 断开信号 disconnect
9 拓展
9.1 信号可以连接信号
9.2 一个信号可以连接多个槽函数
9.3 多个信号可以连接同一个槽函数
9.4 信号和槽函数的参数 必须类型一一对应
9.5 信号和槽的参数个数 是不是要一致?信号的参数个数 可以多于槽函数的参数个数
9.6 信号槽可以断开连接 disconnect
10 Qt4版本写法
10.1 connect( 信号的发送者, 发送的信号SIGNAL( 信号) ,信号接受者, 槽函数SLOT(槽函数) )
10.2 优点 参数直观
10.3 缺点 编译器不会检测参数类型
11 Lambda表达式
11.1 []标识符 匿名函数
11.1.1 = 值传递
11.1.2 & 引用传递
11.2 () 参数
11.3 {} 实现体
11.4 mutable 修饰 值传递变量 ,可以修改拷贝出的数据,改变不了本体
11.5 返回值 ->int {}
3.Qmainwindow
3.1 窗口菜单栏创建
3.2 工具栏
3.3 状态栏
3.4 铆接部件
3.5 对话框
上面创建到堆区防止一闪而过