这里比如说有A、B两个类,在A中定义全局变量,在B中使用:
一、利用extern声明全局变量来进行传递网上都说不推荐使用extern,因其破坏了封装性,我也没有深究过。这里只是简单总结一下用法:
1、在A.cpp定义并初始化一个全局变量
#include "A.h" int initShowConfig=0; void A::Dome(){}
2、在B.cpp中使用
#include "B.h" #include "A.h" //extern:标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义 extern int initShowConfig; void B::Dome() { initShowConfig=1;//修改全局变量值 }二、将全局变量定义成一个类的静态变量,通过类名::变量名进行调用
1、在A.h定义一个类的静态变量
class A { public: static int initShowConfig; };
2、在A.cpp中赋值
#include "A.h" int A::initShowConfig=0; void A::Dome(){}
3、在B.cpp中引入A.h后便可通过类名::变量名调用
#include "B.h" #include "A.h" void B::Dome() { A:: initShowConfig=1; }三、使用信号和槽的方式
我觉得csdn_dyq111博主写的很清晰,讲的是Qt中简单的emit使用,在这我直接复制她的内容
1.这里是两个不相关的类,在qt里可以是两个界面也可以是别的什么。这个一般都是在.h里写的。
class A { public: ***//公共的行为或属性*** private: ***//公共的行为或属性*** signals: ***//信号*** slots: ***//槽*** };
class B { public: ***//公共的行为或属性*** private: ***//公共的行为或属性*** signals: ***//信号*** slots: ***//槽*** };
2.现在A类要给B类一个信号,让B类出现一个用户想要的自定义现象。
2.1.这是在.h里的
***A类的.h中*** class A { public: ***//公共的行为或属性*** void Dome(); ***//这个是演示的例子属性*** private: ***//公共的行为或属性*** signals: ***//信号*** void AmySignal(); ***//在信号的里面加上一个你自定义的信号.*** slots: ***//槽*** };
***B类的.h中*** class B { public: ***//公共的行为或属性*** private: ***//公共的行为或属性*** signals: ***//信号*** slots: ***//槽*** void BmySlot1(); ***//在B类中填一个你想要的现象的定义。*** };
2.2.这是在.cpp里的
***A类的cpp*** void A::Dome() { B = new B; ******//在这里要先将B类实例化*** ***//信号与槽需要实例化对象****** connect(this, SIGNAL(AmySignal()), B, SLOT( BmySlot1())); ***//将A类的信号和B类的槽函数链接起来*** emit void AmySignal(); ***//发出信号*** }
***B类的cpp*** void B::BmySlot1() { printf("hello worldn"); ***//实现*** }
3.这样就可以在A中对B使用信号了。
其他
1.重点是要在A类中包含B类。
2.例子是最简单的用法,在A类中也可以用不同的方式来触发信号,也可以使用不同的方法(使用不同的函数)去连接B类的槽函数。
3.在B类中也可以不同的方式去响应这个信号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)