Qt信号和槽的一些使用技巧

1.避免传递二义性

2.信号和槽传递示例
示例2.11:信号和槽的关联

//头文件m.h的内容
#ifndef M_H
#define M_H
#include<QObject>
#include <iostream>
using namespace std;

class A:public QObject{		 Q_OBJECT
    signals:void s();    void s(int,int);    void s1();    void s2(int);	 };
class B:public QObject{   Q_OBJECT
public slots:
        void x(){cout<<"x"<<endl;}         	void y(int i,int j){cout<<"y="<<i<<j<<endl;}
        void z(int){cout<<"zi"<<endl;}      void z1(float){cout<<"z1f"<<endl;}
 	public:
         void z2(){   //注意,该函数未使用slots声明。
            		cout<<"z2"<<endl; }
private slots:            //私有槽
void z3(){     cout<<"z3"<<endl;        }	};
#endif // M_H

//源文件m.cpp的内容

#include "m.h"
int main(int argc, char *argv[]){    A ma;    B mb;
    QObject::connect(&ma,SIGNAL(s()),&mb,SLOT(x()));  //形式1
    emit ma.s();    //输出x
    QObject::connect(&ma,&A::s1,&mb,&B::x);  //形式3
    emit ma.s1();   //输出x
   // QObject::connect(&ma,&A::s1,&mb,&B::y);  //错误,槽参数的数量多余信号参数的数量
//类型转换
	//关联失败,形式1不支持类型转换
   	//QObject::connect(&ma,SIGNAL(s2(int)),&mb,SLOT(z1(float)));  
     typedef int T;
	//关联失败,对于形式1,类型T和int在字符串形式上并不相同。
//QObject::connect(&ma,SIGNAL(s2(T)),&mb,SLOT(z(int))); 
QObject::connect(&ma,&A::s2,&mb,&B::z1);  //正确,形式3支持隐式类型转换
    	emit ma.s2(2);  //输出z1f
//槽函数与slots
//关联失败,形式1的槽必须使用slots声明。
//QObject::connect(&ma,SIGNAL(s1()),&mb,SLOT(z2()));
    QObject::connect(&ma,&A::s1,&mb,&B::z2);  //正确,形式3的槽不需使用slots声明。
    emit ma.s1();    /*输出x,z2,注意:在之前s1和x的关联并未断开,此时信号s1同时与槽x和z2关联。*/
//访问控制符
    QObject::connect(&ma,SIGNAL(s1()),&mb,SLOT(z3())); //正确,形式1的槽不受访问控制符限制。
    emit ma.s1();  //输出x,z2,z3,因为此时s1与多个槽相关联。
    //QObject::connect(&ma,&A::s1,&mb,&B::z3);//错误,z3是私有的,形式3会受访问控制符的限制。
//函数重载,形式2和形式4的使用见正文
    return 0;		}
3.信号和槽传递参数

链接: 信号槽如何传递参数(或带参数的信号槽).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值