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表达式

相关推荐
Moliay3 分钟前
【资料分析】刷题日记2
笔记·公考·行测·常识·资料分析
小齿轮lsl42 分钟前
PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
笔记·学习·matlab
天玑y2 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
锦亦之22332 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
web_learning_3213 小时前
source insight学习笔记
笔记·学习
无妄啊______3 小时前
mysql笔记9(子查询)
数据库·笔记·mysql
z2014z4 小时前
系统架构设计师教程 第5章 5.3 系统分析与设计 笔记
笔记·系统架构
青石横刀策马5 小时前
泛读笔记:从Word2Vec到BERT
笔记·bert·word2vec
柳鲲鹏5 小时前
编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MinGW版)
开发语言·qt·mysql
三玖诶5 小时前
如何在 Qt 的 QListWidget 中逐行添加和显示数据
开发语言·qt