QT7_视频知识点笔记_1_ 基础知识(帮助文档),窗口(内存回收机制),信号槽(传参),Lambda表达式

1.QT基础

QT是一个框架,不用像C++语言自己从底层写,需要的功能可以先看是否QT库中有直接可使用的

帮助文档的使用:F1跳入帮助文档,

QT中常用的类:比如QPushbutton,查看帮助文档则可知道对应的函数和解决方案

2.窗口

在窗口widget中创建一个按钮pushbutton

cpp 复制代码
private:
    QPushButton pushbutton1;		//方式1
    QPushButton *pushbutton2;		//方式2,常用这种
    //方式2是一个指针,使用时需要new初始化,

在构造函数中实现:

cpp 复制代码
//方式1
    pushbutton1.setParent(this);
    pushbutton1.setText("pushbutton1");

    //方式2
    pushbutton2 = new QPushButton("pushbutton2",this);//可F1在帮助文档中查看其构造函数:QPushButton(QWidget *parent = nullptr)为指定父窗口
    //pushbutton2->show();    //如果没有指定父窗口,则需要show使其显示

(窗口可通过show进行显示,hide进行隐藏)

相关的内存回收机制

cpp 复制代码
一般new一个对象之后需要进行释放,但是QT中如果添加了父对象则不用,父对象析构时会对其附着于上的子对象进行释放(对象)
//==》pushbutton2 不用进行另外的释放
//条件1:内存的自动回收机制适用于从QObject派生的类,窗口类(例如QWidget都是从QObject派生的,所以自动回收机制适用于所有窗口类)
//条件2:需要指定父类(先析构孩子,再析构自己)

新建一个MyButton类,继承自QPushButton,参数(QWidget *parent = nullptr)可以不进行改变。

3.信号槽

信号发出者,信号,信号接收者,处理的槽函数

信号查询:F1帮助文档,找Signals的部分,如果没有找父对象(Inherits)的部分是否有Signals

槽函数查询:与信号类似

槽函数和回调函数???:回调函数:不马上执行,当满足条件时才执行

举例:对应上面提到的窗口中按钮创建的不同方式

cpp 复制代码
    //信号槽
    //connect(&pushbutton1,&QPushButton::clicked,this,&Study_CarManager::close);
    connect(pushbutton2,&QPushButton::clicked,this,&Study_CarManager::close);

自定义信号槽(信号槽传参 ),槽函数的参数不能多于信号的参数(多出来的参数无法获取),槽函数可以重载

.h文件:

cpp 复制代码
signals:
    void signal1(int num1,int num2);

private:
    void Myslot1(int num1,int num2);

.cpp文件:

cpp 复制代码
//自定义带参数信号槽传参,注意也可以是其他类中发出信号,在此槽函数中进行处理
    //如果信号没有重载可以用这种方式
    connect(this,&Study_CarManager::signal1,this,&Study_CarManager::Myslot1);

    //如果信号出现重载,使用一下方法:
    void (Study_CarManager::*MySigsub)(int,int) = &Study_CarManager::signal1;
    connect(this,MySigsub,this,&Study_CarManager::Myslot1);


    emit signal1(100,500);


//以上为构造函数中
void Study_CarManager::Myslot1(int num1, int num2)
{
    //qdebug 自定义的槽函数
    qDebug()<<"Myslot1:num1"<<num1<<"num2"<<num2;
}

4.Lambda表达式(隐式函数,没有函数名)

匿名的函数对象:

cpp 复制代码
//"="为拷贝外部数据的地址
全部:[]() mulable exception ->int {}     -------->  mulable值拷贝时默认为const不可改变,加之后变为可变可赋值  ;exception 为抛出异常;->int为返回值类型。如果整个函数只有一个return则不用加改返回值类型,如果有多个return的地方则需要加。

[=](int num,QString str){
	
}
//"&"为引用外部数据的地址
[&](int num,QString str){
	
}
//如果传入具体参数:[b]则大括号内只能使用外部的该参数

如果函数内容不复杂则可不用重新定义新的函数,直接使用lambda表达式

相关推荐
黎宇幻生3 小时前
Java全栈学习笔记39
java·笔记·学习
遇印记6 小时前
大二java学习笔记:二维数组
java·笔记·学习
寻找华年的锦瑟7 小时前
Qt-QDir
开发语言·qt
bnsarocket8 小时前
Verilog和FPGA的自学笔记6——计数器(D触发器同步+异步方案)
笔记·fpga开发·verilog·自学·硬件编程
金涛03198 小时前
QT-day1
开发语言·qt
LK_079 小时前
【Open3D】Ch.3:顶点法向量估计 | Python
开发语言·笔记·python
li星野9 小时前
打工人日报#20251011
笔记·程序人生·fpga开发·学习方法
摇滚侠9 小时前
Spring Boot 3零基础教程,yml配置文件,笔记13
spring boot·redis·笔记
QT 小鲜肉9 小时前
【个人成长笔记】在Ubuntu中的Linux系统安装 anaconda 及其相关终端命令行
linux·笔记·深度学习·学习·ubuntu·学习方法
QT 小鲜肉9 小时前
【个人成长笔记】在Ubuntu中的Linux系统安装实验室WIFI驱动安装(Driver for Linux RTL8188GU)
linux·笔记·学习·ubuntu·学习方法