Qt一个project调用还有一个project的类成员变量

一句两句话已经不能表达如今的激动情绪了。唯有感叹知识的博大精深,并把感叹转变为文字。

同一个project调用其它类成员变量很easy。

如:

定义

Test1.h中申明成员变量

class A
{
public:
	double m_fTest;
};

Test1.cpp中改变成员变量的值。

m_fTest = 265.78;

然后再类B中调用类A的成员变量m_fTest。并需求类A中改变该值时,类B中也要随之改变:

调用方法:包涵类A的头文件

#include “test1.h”

然后在调用处声明类A的对象:

A  *a;

通过类A的对象来调用成员变量就可以:

a->m_fTest;

不同project中调用:

这就不能再像上面那样调用了,尽管也能调用到,但值不会随之改变,仅仅能调用到初始化值。

这就须要通过虚函数进行调用:

在project1中:

Test1.h中:

class A
{
public:
virtual void update();
virtual void onSimulationSlider(int n){};
};

并在虚函数中调用project2中的虚函数updateSimulation

Test2.h中:重写虚函数onSimulationSlider并在该虚函数中调用project2中的虚函数updateSimulation

#include “Test1.h”
class B
{
public:
	double m_fTest;
void onSimulationSlider(int n){};
};

在project2中:Test3中调用类A中的虚函数:

#include “Test1.h”

A *mTest;

mTest ->onSimulationSlider(n);

然后在project1中的虚函数onSimulationSlider中操纵想要调用的成员变量。

假设在project2中的Test4中的类想通过Test3中的类调用该成员变量,能够通过消息。

比如:Test4是一个界面类,界面上有一个slider控件,点击slider后,想让project1中Test1中的成员变量m_fTest的值随slider的值变化而变化。

则Test3中的虚函数updateSimulation中须要调用在Test4中的虚函数update(重写Test1中的虚函数update)

Test4.h中:

声明信号和槽函数:

signals:

         voidhorizontalSlider( int );

public slots:

                   voidonhorizontalSlider(int);

在Test4.cpp中:

重写Test1中的虚函数updata,并将slider的信号放在虚函数中
bool SimulationHardwareGUI::update()
{
	QObject::connect(ui.m_Slider,SIGNAL(valueChanged(int)),this,SLOT(onhorizontalSlider(int)));
	this->repaint();
	return true;
}

定义槽函数onhorizontalSlider,并在槽函数中调用信号函数

void SimulationHardwareGUI::onhorizontalSlider(int n)
{
	QSlider *ChangeSlider = qobject_cast<QSlider *>(sender());
	if(ChangeSlider != NULL)
	{
		horizontalSlider( n );
	}
}

在Test3中调用Test4的信号函数:

connect((QObject*)(m_SimulationHardware), SIGNAL(horizontalSlider(int )), this, SLOT(onSimulationSlider(int)));

并定义槽函数onSimulationSlider,在槽函数中调用Test1中的虚函数onSimulationSlider。

如此循环调用即能实现不同project的成员变量互调。

值得注意的是在槽函数和信号函数的參数仅仅能是类型,不能定义变量。


原文地址:https://www.cnblogs.com/bhlsheji/p/5364273.html