qt中解决一个全局变量被项目中的其他的类进行调用的方案

qt中解决一个全局变量被项目中的其他的类进行调用的方案,第1张

qt中解决一个全局变量被项目中的其他的类进行调用的方案

这里比如说有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类中也可以不同的方式去响应这个信号

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存