三、QPushButton的使用,信号和槽

一、QPushButton的创建

在这里插入图片描述
QPushButton Class中:
其中Header表示所要引的头文件

Qmake表示所需要的模块

Inherits表示它的父类是:QAbstractButton
点击QAbstractButton可以看QAbstractButton的父类

Inherited By是子类:QCommandLinkButton

Public Function中:构造函数

在这里插入图片描述

#include "mymainwindow.h"
#include<QPushButton>   //按钮控件的头文件

myMainWindow::myMainWindow(QWidget *parent)   //默认函数值在头文件里和原文件里只有一个存在默认值,这里是一个构造函数的意思,主要是对对象parent初始化,这里继承了父类的默认值0
    : QWidget(parent)
{
    //创建一个按钮
    QPushButton * btn = new QPushButton;
    //btn->show();  //端口默认不显示,所以要show一下,show()的方式是默认用顶层的弹出窗口控件
    //让btn对象  依赖在myWidgt窗口中
    btn->setParent(this);   //设置父类

    //显示文本
    btn->setText("第一个按钮");


    //创建第二个按钮,弊端:按照控件的大小来创建的窗口
    QPushButton * btn2 = new QPushButton("第二个按钮",this);    //这里要是不new就直接执行析构函数了

    //移动btn2按钮,因为把btn按钮覆盖了
    btn2->move(100,100);

    //按钮可不可以,重新制定大小
    btn2->resize(50,50);

    //重置窗口的大小
    resize(600,400);

    //设置固定窗口大小
    setFixedSize(600,400);

    //设置窗口标题
    setWindowTitle("第一个窗口");
}

myMainWindow::~myMainWindow()
{
}

二、中文要设置成UTF-8格式才不会乱码

在这里插入图片描述
在工具选项中
在这里插入图片描述
选择文本编辑器件,默认编码选择UTF-8

三、对象树

在这里插入图片描述
在这里插入图片描述
构造是从上往下,析构是从下往上释放
只要指定为父亲他都会把你释放掉

1、验证被释放掉

在这里插入图片描述
右键文件夹,点击Add New…(新建文件)
在这里插入图片描述
选中C++ Class
在这里插入图片描述
创建名为MyPushButton
父类选择QWidget
点击下一步
在这里插入图片描述
点击完成
在这里插入图片描述
建立成功
在这里插入图片描述
父类改成QPushButton
在这里插入图片描述
设置QDebug调试模式
在这里插入图片描述
修改mymainwindow.cpp文件设置pushbutton为子类
在这里插入图片描述
运行程序,首先出现我的按钮构造类
在这里插入图片描述
关掉窗口后,先访问父类,再访问子类,然后析构释放子类,再释放父类

四、QT窗口坐标系

在这里插入图片描述

九、信号和槽—点击按钮关闭窗口

1、查询signal信号的定义(帮助文档)

在这里插入图片描述
先搜索QPushButton类,查询里面内容
在这里插入图片描述
发现signals相关,其中4个继承与父类QAbstractButton
3个继承与父类QWidget
2个继承与父类QObject
在这里插入图片描述
点开父类进行观看
在这里插入图片描述
有四个信号,第一个是点击
第二个摁下
第三个释放
第四个切换(比如摁一下就开,摁一下就关)这个是有一个状态
在这里插入图片描述

2、搜索QWidget查找槽函数(slot是槽的意思)

在这里插入图片描述
找到槽函数
在这里插入图片描述
点击close,有介绍
在这里插入图片描述
这种有小凹槽的都是槽函数
在这里插入图片描述
运行后点击我的按钮确实界面被关闭了。

五、自定义信号和槽

在这里插入图片描述

1、要求

在这里插入图片描述
创建类,其中QObject是最全的控件,有这个我们就可以不用去管释放的问题。
在这里插入图片描述

2、创建Teacher和Student类

在这里插入图片描述
Teacher类作为信号的发送者,定义了一个hungry信号
在这里插入图片描述
Student类作为信号的接受者,写一个槽为treat()
在这里插入图片描述

3、在窗口中定义Teacher对象和Student对象,并定义一个classIsOver()来表示下课了,触发hunger()信号

在这里插入图片描述

六、自定义的信号和槽发生重载的解决

1、进行重载

在这里插入图片描述
重载后出现2个hungry
此时之前的connect就不能用了,得改变

2、改变链接(connect)

在这里插入图片描述
void(Teacher:: * teacherSignal)(QString) = &Teacher::hungry;
void(Student:: * studentSlot)(QString) = &Student::treat;
进行变量参数设置

改变触发信号设置

3、QString转换成char *方法

在这里插入图片描述
可以查找帮助文档中的QByteArray
查看所要转换成的数据类型在这里插入图片描述

七、信号连接信号

在这里插入图片描述
在这里插入图片描述
可以如上上图信号连接信号,也可以断开信号

八、QT4版本信号槽连接

1、拓展

(1、信号可以连接信号
(2、一个信号可以连接多个槽函数
(3、多个信号可以连接同一个槽函数
(4、信号和槽的参数,必须类型一一对应
(5、信号和槽的参数个数,是不是要一致?信号的参数个数 可以多于槽参数的个数

2、QT4版本以前的信号和槽连接方式

QT4的信号槽连接无参的版本

connect(zt,SIGNAL(hungry()),std,SLOT(treat()));

QT4版本优点,参数直观,缺点:类型不做检测
QT5以上支持QT4的写法,反之不支持

九、Lambda表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
&{
btn->setText(“aaaa”);
btn2->setText(“bbbb”);
}();
其中尾巴的()前面的代码是一个函数声明,带上尾巴()才是函数调用
在这里插入图片描述
在这里插入图片描述
其中m只在它那个语句中改变

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一般用=值函数传递

在这里插入图片描述

十、信号槽的总结

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Is_LiuYiZheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值