QT开发笔记-基础篇章 信号/槽 SIGNAL/SLOT

发布于:2022-11-03 ⋅ 阅读:(366) ⋅ 点赞:(0)

1.QT发展史

  • 曾被诺基亚收购

  • 用QT编写程序,可以直接运行到不同的平台windows、Linux、mac

  • 知名的软件—基于QT:谷歌地图、wireshark(免费的网络抓包软件,通过抓包分析可以解决开发过程中的很多问题)、virtualbox(开源虚拟机)、WPS、VLC(强大的音频播放器)

  • 界面美观,支持QSS,类似于web的css,修改控件的样式很简单

2.QT安装

两个重要的开发环境1.QT creator 最稳定的版本是5.15 LTS,最新版本QT6.3(收费) 2.Visual studio 微软集成开发环境,宇宙最强ide,内部安装一个QT的插件即可进行QT开发

QT是基于C++的GUI框架

3.新建第一个QT工程

hellowqt.pro

QT+=core gui//用于添加用到的QT模块,比如后面进行数据库的开发,需要添加sql模块

在第五个版本以后,widgets模块从gui中独立出来

4.项目构建流程

TBD

5.标准信号槽

connect(ui->btnMax,SIGNAL(clicked()),this,SLOT(showMaximized()));

6.自定义信号槽

自定义类commander,soldier
connect(&commander,SIGNAL(go()),&soldier,SLOT(fight()));

7.信号槽的多种表达方式

  • SIGNAL/SLOT(QT4)
  • 函数地址
  • UI设计师界面-转到槽
  • UI设计师界面-信号槽编辑器
  • lambda-----C++11
五个部分

[ 捕获列表]((parameters)option->return-type(body)

  • 捕获列表
  • parameters:参数列表 可选
  • option:函数选项 可选
  • return-type:返回值类型 可选 没有返回值的时候也可以连同符号->一起省略
  • body:函数体
//1、函数的定义
#if 0
	[](){
	qDebug()<<"lambda..";
	};
#endif

//2、函数的调用
#if 0
	[](){
	qDebug()<<"lambda..";
	}()
#endif

	int a=10;
#if 0
	//3、不捕获任何变量
	[](){
	qDebug()<<"lambda..";
	}();
#endif 
	//4、按照引用捕获任何变量
#if 0
	[&](){
	qDebug()<<a++;
	}();
	qDebug()<<a;
#endif
	//5、按值进行捕获
#if 0
	[=]()mutable{
	qDebug()<<a++;
	}();
	qDebug()<<a;
#endif
	//5、按参数进行捕获
#if 0
	[=](int x,y)mutable{
	qDebug()<<x+y;
	}(1,2);
#endif
	//6、返回值
#if 0
	int sum=[](int x,y)->int{
	return x+y;
	}(1,2);
	qDebug()<<sum;
#endif
	//6、v2返回值
#if 0
	int sum=[](int x,y){
	return x+y;
	}(1,2);
	qDebug()<<sum;
#endif


8.信号槽-扩展

  • 8.1 重载的时候如何进行信号槽的连接
void (Commander::*pGo)()=&Commander::go;
orvoid (Soldier::*pFightforc)(QString)=&Soldier::fight;
  • 8.2 一个信号连接多个槽
    举例:军官发出信号,士兵1前进,士兵2逃跑

  • 8.3 多个信号连接同一个槽
    距离:军官发出move或者go信号,都可以使士兵前进fight

  • 8.4 信号连接信号
    定义成员函数 析构问题
    在这里插入图片描述

  • 8.5 信号断开-disconnect

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到