qt连接,断开信号与槽

在qt中,当用户操作当前窗口部件时,需要其他窗口部件响应时,使用信号与槽的机制,会更灵活,更方便.信号与槽是qt的核心功能之一,它是一种松耦合的关系.发送信号的只管发射信号,接收信号的也只管接收,它不需要知道谁发送,谁接收,因此,这种机制更灵活便捷.

使用信号与槽机制,需要在类中声明宏Q_OBJECT

定义信号(signals),使用signals关键字在类中声明.信号不能也无需实现.发送信号需要用关键字emit + 信号名.例如 emit Comeon()

Q_OBJECT

signals://信号声明. 不能也无需实现
    void Comeon(QString& str);
    void Comeon2(QString& str); 
    void Comeon3();
    void Comeon4();

定义槽函数(slots),槽函数就是接收到信号后响应执行的函数.

private slots://槽函数
    void on_whBtn_clicked();
    void on_zgBtn_clicked();
    void on_sjBtn_clicked();//自动连接,on_对象名_点击信号

    //该槽方法响应Comeon()发送的信号.
    //信号与槽方法参数列表一一对应.槽方法的参数只能比信号的参数少,不能多!!!
    void ComeonGuys(QString& str);
    void ComeChina(QString& str);
    void ComeHuaxia();
    void ComePeople();

连接信号与槽,使用connect函数,对信号与槽进行连接.connect实现的参数有:谁发送信号?发送什么信号?谁接收信号?接收到信号后需要执行什么方法? 以下面的代码为例:

this即为当前窗口对象,执行了Comeon(QString&)信号,this为当前窗口接收信号,执行槽方法ComeonGuys(QString&).

connect(this,SIGNAL(Comeon(QString&)),this,SLOT(ComeonGuys(QString&)));

 这是qt关于connect函数的实现源码,参数是:sender发送信号者,signal发送的信号,receiver信号接收者,method执行的槽方法,type连接的类型.在这里连接类型默认为AutoConnection(自动连接).

static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
                        const QObject *receiver, const QMetaMethod &method,
                        Qt::ConnectionType type = Qt::AutoConnection);

信号与槽的连接方法有4种:

1.一个信号连接一个槽方法.

connect(this,SIGNAL(Comeon(QString&)),this,SLOT(ComeonGuys(QString&)));

2.一个信号连接多个槽方法 .

一个信号Comeon(),连接了ComeChina(),ComeHuaxia() 2个槽方法.也就是说,发送一个信号,就会执行2个槽方法 ComeChina(),ComeHuaxia()(多个槽方法).

    //一对多 一个信号响应多个槽方法.....信号,槽方法的参数名称不用写
    connec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值