QT学习(三)——信号与槽

如果需要在窗口类中实现按钮的错误操作:

窗口类实现文件——widget.cpp

#include "widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton b;
    b.setParent(this);
    b.setText(QString("关闭"));
}

Widget::~Widget()
{
}

解释:
此时的按钮类是一个局部变量,在窗口类构造函数执行完毕时,就会自动调用析构函数释放按钮

运行程序:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
正确操作:应当把按钮类作为窗口类的一个成员

窗口类实现文件——widget.cpp

 

#include "widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
   b.setParent(this);
   b.setText((QString("关闭")));
   b.move(100,100);


   ob=new QPushButton(this);
   ob->setText(QString("高翻,永远的神!"));
}

Widget::~Widget()
{
    delete ob;
}

程序运行:
 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来开始正题:

将窗口按钮和窗口链接,使得按钮发出信号窗口可以接收

窗口类实现文件——widget.cpp

 

#include "widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
   b.setParent(this);
   b.setText((QString("关闭")));
   b.move(100,100);

   ob=new QPushButton(this);
   ob->setText(QString("高翻,永远的神!"));
  
   connect(&b,&QPushButton::pressed,this,&Widget::close);
   //解释:
   /*
    *&b是信号发出者,指针类型
    *&QPushButton::pressed是处理的信号 ,&发送者的类名::信号名字
    * this:信号接收者
    * &Widget::close是槽函数,信号处理函数  &接收的类名::槽函数的名字
   */
}

Widget::~Widget()
{
    delete ob;
}

此时再使用鼠标点击“关闭”按钮,窗口程序结束。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

自定义槽函数:

窗口类实现文件——widget.cpp

#include "widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
   b.setParent(this);
   b.setText((QString("关闭")));
   b.move(100,100);


   ob=new QPushButton(this);
   ob->setText(QString("高翻,永远的神!"));



   connect(&b,&QPushButton::pressed,this,&Widget::close);
   //解释:
   /*
    *&b是信号发出者,指针类型
    *&QPushButton::pressed是处理的信号 ,&发送者的类名::信号名字
    * this:信号接收者
    * &Widget::close是槽函数,信号处理函数  &接收的类名::槽函数的名字
    */

   /*自定义槽,普通函数的用法
    * QT5:任意的成员函数,普通全局变量,静态函数
    * 槽函数需要与信号一致(参数,返回值)
    * 由于信号都没有返回值,说明槽函数一定没有返回值
    */

   //Get_to函数是我自定义的一个修改按钮显示情况的一个槽函数
   connect(ob,&QPushButton::released,this,&Widget::Get_to);
   //在点击完其中一个按钮之后,信号的接收者变成了另一个按钮,槽函数是把另一个按钮给隐藏
   connect(ob,&QPushButton::released,&b,&QPushButton::hide);
   
   
   /*
    * 类比一下的话
    * 信号就是短信
    * 槽函数就是接受的手机
    * 一条短信可以发给发给多个手机
    */
}
Widget::~Widget()
{
    delete ob;
}
void Widget::Get_to()
{
    ob->setText(QString("高翻,爆发的神!"));
}

程序运行:

点击按钮“高翻,永远的神!”

发现,关闭按钮被隐藏,点击的按钮显示改变。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值