Qt一个工程调用另一个工程的类成员变量

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

同一个工程调用其他类成员变量非常简单。

如:

定义

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;

不同工程中调用:

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

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

在工程1中:

Test1.h中:

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

并在虚函数中调用工程2中的虚函数updateSimulation

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

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

在工程2中:Test3中调用类A中的虚函数:

#include “Test1.h”

A *mTest;

mTest ->onSimulationSlider(n);

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

如果在工程2中的Test4中的类想通过Test3中的类调用该成员变量,可以通过消息。

例如:Test4是一个界面类,界面上有一个slider控件,点击slider后,想让工程1中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。

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

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

时间: 2024-10-23 08:40:19

Qt一个工程调用另一个工程的类成员变量的相关文章

QT创建与调用Dll方法(包括类成员)--显式调用

看网上的好多关于QT调用Dll的方法,大部分都是调用函数的,并没有调用C++类成员的情况,即使是有,比如说: 使用Qt编写模块化插件式应用程序 Qt 一步一步实现dll调用(附源码)---(这一篇里没有调用类成员的) Qt调用dll中的功能函数 ?我就是按照这上面的教程一步步做的,可惜了都没成功~~~这里面都有一个最重要的步骤没有说清楚(可能怪我笨~~),路径问题!!! 所以这里自我做一下总结: 创建时选择C++ Library就可以了,然后选择Shared Library(共享库),其他默认O

一个Activity调用另一个Activity的非静态方法

注意:前提是界面二被打开过未关闭,则用此方法即可实现在界面一中调用界面二的方法! 界面一: public class OneActivity extends Activity { @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_one); callTwoActivityMethod(); } /

从一个应用调用另一个应用的Activity(已知包名)

最近要用到从一个应用调用另一个应用的Activity,我封装了一个方法,直接调用这个方法就可以,前提是要知道要调用应用的包名. 以下是实现方法的代码: 1 2 /** 3 * 根据包名调用app 4 * @param packageName 5 */ 6 public void openApp(String packageName) { 7 PackageInfo pi; 8 try { 9 pi = getPackageManager().getPackageInfo(packageName,

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的. 比如,下面代码例子中,有两方法,一个有@Transational注解,一个没有.如果调用了有注解的addPerson()方法,会启动一个Transaction:如果调用updatePersonByPhoneNo(),因为它内部调用了有注解的addPerson(),如果你以为系统也会为它启动一个Transaction,那就错了,实际上是没有的. @Service public cla

关于一个解决方案中两个项目,一个项目调用另一个项目的文件

在看一个比较大的项目时, 一个解决方案中有多个项目,比如一个是写好的项目,一个是测试项目,那么怎么从测试项目调用另一个项目的文件呢? 具体解决方案如下: 打开测试项目的属性页:附加包含目录 然后填入你上一个项目源文件所在路径(如果项目须移动时前面加上..\) 接下来就可以调用上一个项目的文件了

反射②:调用构造方法、普通方法以及成员变量

先获取一个类(如Student) Class clazz = Student.class; ①获取构造方法:借助Class类某些可以获取对应类中声明的构造方法实例对象 //Test测试//返回该对象表示类参数列表相匹配的public构造方法(不含继承)对应的Constructor对象 Constructor constructor = clazz.getConstructor();//public //返回该对象表示类参数列表相匹配的构造方法(不区分访问权限)对应的Constructor对象 C

Java多态 实例子类自动调用父类为空的构造方法 成员变量不支持Override 可写,没多态效果

=======子类 实例化的时候 默认调用父类为空的构造方法 即super();可省略. 但是当父类没有为空的构造方法的时候就必须在子类中       调用这个方法先实例父类 才能实例子类. 父类为空的构造方法 默认存在 在子类中默认自动调用. ========父类引用指向子类对象的时候  根据引用变量中 实例所属的类调用不同的类的方法,这种多态只适用于方法不适用与成员变量. 简单的理解为Java不支持属性字段覆盖(override),只支持方法覆盖,属性字段 不可重写. ========实例化

09_Android中ContentProvider和Sqllite混合操作,一个项目调用另外一个项目的ContentProvider

1.  编写ContentPrivider提供者的Android应用 清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.sqlitedemo" android:versionCode=&qu

Eclipse中一个项目调用另一个项目的资源

如果一个项目A想要引用另一个项目B的资源的话,按照一下步骤进行设置: 右键点击项目A---->>>Build Path--->>>Configure Build Path...--->>>在弹出的对话框中选择Projects选项卡--->>>点击Add--->>>选择项目B进行添加. 备注: 如果项目A关联了项目B,再使用项目B关联项目A,那么项目A和项目B上就会显示红色的感叹号表示警告.