QT学习(四)

 一、Qt中的坐标系

Qt中的坐标系

左上角为 0 , 0 点

x以右为正方向

y以下为正方向

二、信号和槽   

1、连接函数:connect

2、参数:

参数1:信号的发送者

参数2:发送的信号(函数的地址)

参数3:信号的接收者

参数4:处理的槽函数

 3、松散耦合

信号和槽机制是Qt框架的核心特性之一,它允许对象之间的通信,而无需显式地指定对象之间的具体联系。这种机制体现了松散耦合(Loose Coupling)的设计原则。

松散耦合是指模块之间相互依赖的程度较低,每个模块都可以独立地改变和更新,而不会对其他模块产生过多的影响。在Qt中,信号和槽的松散耦合特性体现在以下几个方面:
① 动态连接:在运行时,可以动态地将信号与槽连接起来,而不是在编译时固定。这使得对象的交互变得更加灵活,可以在程序运行期间根据需要进行调整。
② 信号发射:对象可以在任何需要的时候发射信号,不需要事先知道是否有槽会接收这些信号。这减少了对象之间的直接依赖。
③ 槽的独立性:槽可以独立于信号存在,即一个槽函数可以不作为任何信号的接收者。这样的设计使得槽可以作为普通的方法来处理事件,而不必与特定的信号绑定。
④ 信号的多对一和一对多连接:一个信号可以连接到多个槽,同样,一个槽也可以处理多个信号。这种连接方式进一步减少了对象间的直接依赖,提高了代码的模块化。
⑤ 易于测试和维护:由于信号和槽的分离,可以更容易地测试单独的对象,而无需考虑其与其他对象的交互。同时,维护和更新代码时,只需修改信号或槽的一方,另一方无需改变。

总的来说,Qt的信号和槽机制通过提供一个抽象层,将对象之间的交互抽象化,从而实现了松散耦合。这使得Qt应用程序更加模块化、易于理解和维护。

  connect(quitBtn, &QPushButton::clicked, this, &MyWidget::close); 这行代码使用了Qt的信号与槽机制来连接按钮的点击信号(clicked)和MyWidget类的close槽函数。当按钮被点击时,会自动调用close函数。这里的this指针再次用来指定接收信号的对象是当前的MyWidget实例,而&MyWidget::closeclose槽函数的地址。

下面是我找Signal发送信号遇到的问题,在MyPushButton类里我找不到Signal 😵(有人会的话告诉我一下(双手合十))

 

三、自定义的信号和槽

使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。

案例:下课后,老师触发饿了信号,学生响应信号,请客吃饭

 创建两个基类是QObject的类:student类和teacher类

 teacher类:

不过为什么我的只有signals没有public slots啊,只能自己写了......

student类

函数实现:

建立连接,connect写好后还不能触发,还要一个下课函数,因为案例题目是 “下课后,老师触发饿了信号,学生响应信号,请客吃饭”,所以要下课了老师才能触发饿了的信号。

然后就可以调用信号啦:

四、一些代码解释

好吧其实是因为我有点不太懂,所以就记录一下(╹ڡ╹ ),所以可能后面还会补充

1.

//创建一个老师对象
this->zt=new Teacher(this);
//创建一个学生对象
this->st=new Student(this);

this->zt=new Teacher(this); 这句代码创建了一个Teacher对象,并提供其一个父对象也就是this所指的对象(在C++等编程语言中,this 是一个指向当前对象本身的指针。在类成员函数中使用 this 指针,可以访问当前对象的数据成员和成员函数。),我们创建的这个QObject对象(zt)会自动添加到其父对象的children()列表中。

 这里涉及的对象树的概念👇

2.emit 

在Qt中,emit是一个关键字,用于从一个对象发送信号。信号是Qt中用于对象间通信的机制,允许一个对象通知其他对象发生了某个事件。使用emit关键字可以触发(发送)信号,从而调用与之相关联的槽函数。

需要注意的是,emit关键字实际上是Qt中的一个宏,它在编译时被扩展为调用实际的信号发送函数。在Qt 5及以后的版本中,emit关键字可以用于任何类型的信号,不仅仅是内置的信号。

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值